DB2中添加索引无效 10
DB2中,像某表添加了索引,可以在数据库的索引目录下找到该索引,但运行该表查询语句的访问方案时,却没有该表的索引。请问这是什么原因引起的,怎么解决?在对该表的查询条件中W...
DB2中,像某表添加了索引,可以在数据库的索引目录下找到该索引,但运行该表查询语句的访问方案时,却没有该表的索引。
请问这是什么原因引起的,怎么解决?
在对该表的查询条件中Where是用 ‘=’,如果换成 '>=',则可以看到索引。 展开
请问这是什么原因引起的,怎么解决?
在对该表的查询条件中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
运行完统计后再分析你要执行的SQL语句,看索引能否用的上。
DB2是按照成本来进行语句执行的优化的,只要你正确的运行了统计,一般情况下,会优先选择使用索引。
也有部分情况下不会使用索引。比如某个cloumn,同时创建了在索引1和索引2中,那DB2到底会选择索引1和索引2,就要看他认为使用哪个索引的成本低了。
很多不使用索引的情况是因为你们有做完正确的统计。
所以首先建议你先针对该表做一下完整的统计,命令见上。
更多追问追答
追问
runstats on table schema.tablename and detailed indexes all
这个命令在DB2上运行过了,结果还是一样
追答
那这个问题相对来说就较为复杂了。
因为〉=可以用索引,而=的时候,不用。说明数据库的优化引擎还是认为〉=的情况下,使用这个索引成本较低,而=时,成本较高。
如果你一定需要使用该索引,可以有很多方法。
我估计你这个cloumn在造数据时,造的数据是同一个值,索引数据库认为不需要使用索引
你试着在这个列上插入1000个不同的值,然后在做统计,应该=时使用索引的概率较大
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询