DB2中添加索引无效

DB2中,像某表添加了索引,可以在数据库的索引目录下找到该索引,但运行该表查询语句的访问方案时,却没有该表的索引。
请问这是什么原因引起的,怎么解决?
在对该表的查询条件中Where是用 ‘=’,如果换成 '>=',则可以看到索引。

第1个回答  2011-05-07
首先在创建完索引之后,先运行:
runstats on table schema.tablename and detailed indexes all
运行完统计后再分析你要执行的SQL语句,看索引能否用的上。
DB2是按照成本来进行语句执行的优化的,只要你正确的运行了统计,一般情况下,会优先选择使用索引。
也有部分情况下不会使用索引。比如某个cloumn,同时创建了在索引1和索引2中,那DB2到底会选择索引1和索引2,就要看他认为使用哪个索引的成本低了。
很多不使用索引的情况是因为你们有做完正确的统计。
所以首先建议你先针对该表做一下完整的统计,命令见上。追问

runstats on table schema.tablename and detailed indexes all
这个命令在DB2上运行过了,结果还是一样

追答

那这个问题相对来说就较为复杂了。
因为〉=可以用索引,而=的时候,不用。说明数据库的优化引擎还是认为〉=的情况下,使用这个索引成本较低,而=时,成本较高。
如果你一定需要使用该索引,可以有很多方法。
我估计你这个cloumn在造数据时,造的数据是同一个值,索引数据库认为不需要使用索引
你试着在这个列上插入1000个不同的值,然后在做统计,应该=时使用索引的概率较大

追问

谢谢。因为在做测试的时候数据库里面并没有数据,那这个问题是与这个原因有关了 ?

追答

那你试一下就知道了