我在一张桌子上有一百万行。出于性能原因,我被告知在in子句中使用union。是真的吗

cp392

我们在一个表中有一百万行。

我们的选择:

select * from tableA where column1 in ("a", "b", "c", "d") and where column2 = "abc";

并且我们在column1和column2上具有唯一索引。

有人告诉我要:

select * from tableA where column1 = "a" and column2 = "abc"
union
select * from tableA where column1 = "b" and column2 = "abc"
union
select * from tableA where column1 = "c" and column2 = "abc"
union
select * from tableA where column1 = "d" and column2 = "abc";

IN子句中可以有1到100个不同的值。因此最好是使用IN子句运行一个语句或运行100语句并执行并集。

戈登·利诺夫(Gordon Linoff)

如果您column1, column2按顺序有唯一的索引,则带有的版本union肯定会利用该索引。如评论中所述,您应该使用union all而不是union这消除了删除重复项的步骤(即使没有重复项)。这将是少数索引查找操作,并且应该很快进行。

Oracle是否使用第一个版本所需的索引在某种程度上是未知的:

where column1 in ('a', 'b', 'c', 'd') and column2 = 'abc'

大多数数据库将不会在这种情况下,最佳使用索引。如果数据库使用该索引,它将使用该索引进行column1查找,然后扫描将值与进行比较的索引column2Oracle可能还有一些其他的灵巧之处,它们将在此处有效地使用索引。

但是,很容易解决问题。如果您在上有一个索引column2, column1,则该索引将用于该where子句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的搜索字段在一张桌子上有效,而在另一张桌子上无效?

我可以阻止一张桌子更新吗?

我在Excel 2007中有一张桌子,我想要一张图表

在一张桌子内,我需要有 thead、tbody 和 tfooter 吗?

Symfony 2 Multiple Selects在同一张桌子上有计数吗?

我应该使用一张桌子还是分成两张桌子?

我有一张桌子,希望我的描述中显示的结果桌子

没有 FROM 子句的 SELECT 查询,有一百万行

我可以仅使用一个标签“ tr”制作一张像这张照片的桌子吗?

我有一张桌子,但我不确定如何让标题可以滚动

我有一张桌子,我的输出结果如描述中所示

我曾尝试使用 beautifulsoup 刮一张桌子,但表格中只有一行显示为输出

我有一张桌子,我想对其进行一些预先计算并以新的形状获得桌子

完全外部联接或联合。哪个更快(我的表有一百万行)

我如何使用php在mysql中插入一百万行时防止内存不足

一张桌子可以有多个模型吗

我想显示一张桌子上的记录

我如何订购另一张桌子的查询?

如何修复我的代码以显示一张桌子?

火鸟-自我加入一张桌子

我有一张桌子,上面有城市和人口。我想根据人口进行随机分组

出于性能原因,我们必须使用C

被告知我的代码有太多的“如果”语句

我可以在where子句中使用or或(||)吗?

我可以在 case 子句中使用子查询吗

一张桌子上有多张Google地图出现问题

我有一张桌子,为什么我的中央单元格比其他单元格长

使用一张桌子加入三张桌子

SQL 数据库。我丢了一张桌子,我现在如何创建它?