查询语句,执行计划中索引是如何选用的?
SELECT *
FROM commodity_info,commodity
WHERE ( commodity_info.COM_ID = commodity.COM_ID )
and (
(commodity.com_code like '%b000002%')
or
(
commodity_info.com_id in (select commodity_info.down_comid from commodity,commodity_info where commodity.com_id=commodity_info.com_id and commodity.com_code like '%b000002%')
)
)
SELECT *
FROM commodity_info,commodity
WHERE ( commodity_info.COM_ID = commodity.COM_ID )
and (
(commodity.com_code like '%b000002%')
or
(
commodity.com_id in (select commodity_info.down_comid from commodity,commodity_info where commodity.com_id=commodity_info.com_id and commodity.com_code like '%b000002%')
)
)
这两条语句的区别是 or后表名不同,其他的地方都一样。
他们的执行效果差别很大,第一条,两分钟,第二条,1秒钟。
查看执行计划后发现,第一条是没有使用索引IX_COM_COMCODE,而是使用的聚集索引PK_COMMODITY。
那位高手能帮忙解释一下为什么?
[解决办法]