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。
那位高手能帮忙解释一下为什么?
------解决方案--------------------
------解决方案--------------------
commodity_info.com_id
这个是详细表?
com_id是什么个情况?
commodity.com_id 又是什么个情况。
从执行计划来看第一个是两个表join 在串联 后面的or条件
第二个是对表commodity赛选之后 和commodity_info 进行join
这样的话第二个当然是大优了
------解决方案--------------------
感觉LZ应该只是想作个测试吧,要不不可能写出这么低级的SQL语句
------解决方案--------------------
------解决方案--------------------