大家好,我下面两个表中,建立索引,可是informix执行计划却不使用,而是去顺序扫描。
帮忙看看是是怎么一回事,如何解决。谢谢!
1、service 在字段groupid建有索引,但是下面的查询语句却没有使用索引,而是顺序扫描。
Index_name Owner Type/Clstr Access_Method Columns
163_328 ipc unique/No btree groupid
QUERY:
------
SELECT groupcallfunc,sysblackfunc,limittype
from service
where groupid=2
Estimated Cost: 1
Estimated # of Rows Returned: 1
1) service: SEQUENTIAL SCAN
Filters: service.groupid = 2
2、User表有联合索引(GroupNumber,DIDPNP),执行计划却把查询条件的顺序掉换了,不使用索引
QUERY:
------
SELECT DIDNumber ,DIDPNP ,DIDPNP
from User
WHERE GroupNumber='1211' AND DIDPNP ='0103121211'
Estimated Cost: 1
Estimated # of Rows Returned: 1
1) user: SEQUENTIAL SCAN
Filters: (user.didpnp = '0103121211' AND user.groupnumber = '1211' )
------解决方案--------------------------------------------------------
字段是什么类型的?
------解决方案--------------------------------------------------------
显示一下你创建索引的语句。
------解决方案--------------------------------------------------------
Estimated Cost很低。不知道为什么有 SEQUENTIAL SCAN
------解决方案--------------------------------------------------------
因为数据少,优化器判断执行索引的cost比顺序扫描的大,所以执行了顺序扫描,很多情况下数据量小的表没有必要建索引
------解决方案--------------------------------------------------------
groupnumber varchar,
该成char试试
------解决方案--------------------------------------------------------
这个么,想不通,可能有别的配置/版本不同。
我休息了。