查找数据库中字段与其他字段不同的所有行

时间:2010-01-21 14:14:09

标签: sql mysql

我有以下SQL查询:

SELECT * FROM table WHERE field_1 <> field_2

使用哪种最佳索引结构,以保持此查询的效率:field_1和field_2上的两个索引或包含这两个字段的单个索引?

编辑:数据库是MySQL

6 个答案:

答案 0 :(得分:1)

我想这可能取决于您使用的是哪个平台,但在MS SQL Server上肯定是一个索引!

答案 1 :(得分:1)

如果你有一个巨大的表,最好是对其进行非规范化并将filed1&lt;&gt; field2的结果存储在单独的列中,并在相应行的每次插入/更新时更新它

答案 2 :(得分:1)

索引不会对您有所帮助。

数据库必须进行表扫描,因为它正在比较同一行中的两个字段。

答案 3 :(得分:0)

这取决于您的数据库引擎,但通常最好假设查询每个表只使用一个索引。这意味着两列中的单个索引可能是最佳的。

但是,找到的唯一方法是使用虚拟数据填充表并尝试使用。确保虚拟数据在其分布方式上具有代表性,例如,如果99%的field2值彼此相同,则可能会降低具有索引的值。

答案 4 :(得分:0)

可以肯定的是,我会尝试所有三个选项,但请记住,每次插入/更新都要写入每个索引。 (因此,对两个字段进行索引必须更有利于弥补写入性能的负面影响)请记住,它不必是完美的,它必须足够好以处理系统吞吐量而不会造成不可接受的UI性能延迟。

我首先尝试的是字段上具有最明显值的单个索引...即,如果Field1中有1000个不同的值,而字段2只有20个,则将索引放在field1上。 / p>

答案 5 :(得分:0)

这是一篇关于索引和不等式匹配的好文章:

http://sqlinthewild.co.za/index.php/2009/02/06/index-columns-selectivity-and-inequality-predicates/

或者,如果您的数据很大,您可以考虑使用触发器用一个位来标记另一列,指示列是否匹配,然后搜索该列。当然,一切都取决于你的情况。