IN CLAUSE中使用零值的DB2查询导致表扫描,忽略列上的索引

时间:2017-05-31 07:20:11

标签: sql performance db2 zero

SELECT * FROM TABLE1 WHERE COL1 in( 597966104, 597966100);
SELECT * FROM TABLE1 WHERE COL1 in( 0, 597966100)

在上面的2个查询中,第一个查询使用在COL1上创建的索引,但第二个查询不使用索引。两个查询的唯一区别是在第二个查询的IN CLAUSE中使用零(0)。为什么零会导致索引被忽略。这导致表扫描并降低查询性能。有没有解决这个问题的方法。对此问题的任何帮助表示欢迎和赞赏。使用的数据库是DB2

1 个答案:

答案 0 :(得分:1)

DB2有一个基于成本的优化器。它试图找出最佳访问计划,并使用其统计和配置来确定它。 在您的情况下,col1 = 0的行数确实很重要。例如,当col1 = 0时,对于40%的数据,执行表扫描可能会更便宜。

如果您想了解更多详细信息,请说明查询,您将看到如何访问数据以及优化程序为结果集猜测的行数。

通过为表运行runstats,确保您拥有正确和最新的统计信息,因为这将是优化程序最重要的信息来源。