1.当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用
针对此条,做了几个测试(stock_no是建立了索引):
1.1 select a.item_barcode, a.stock_no, a.balance_qty
from ERP.st_itembarcode_stock a
where a.stock_no like '%C'
得到的是
SELECT STATEMENT, GOAL = CHOOSE 2472 63013 1575325 2472
TABLE ACCESS FULL ERP ST_ITEMBARCODE_STOCK 2472 63013 1575325 2472
1.2 select a.item_barcode, a.stock_no, a.balance_qty
from ERP.st_itembarcode_stock a
where a.stock_no like 'C%'
得到的是:
SELECT STATEMENT, GOAL = CHOOSE 2472 67882 1697050 2472
TABLE ACCESS FULL ERP ST_ITEMBARCODE_STOCK 2472 67882 1697050 2472
1.3 select a.item_barcode, a.stock_no, a.balance_qty
from kxstepiii.st_itembarcode_stock a
where a.stock_no like ' C%' [color=#FF0000]-- 这里前面有一个空格
得到的是:
SELECT STATEMENT, GOAL = CHOOSE 1362 15559 388975 1362
TABLE ACCESS BY INDEX ROWID ERP ST_ITEMBARCODE_STOCK 1362 15559 388975 1362
INDEX RANGE SCAN ERP INX_ST_ITEM_BARCODESTOCK_2 87 15559 87[/color]使用'_'得到的也是一样的结果.
这个怎么解? 2.不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替
针对此条,做了几个测试(position_id是建立了索引):
2.1 select a.position_id , a.stock_no, a.balance_qty
from ERP.st_itembarcode_stock a
where a.position_id > 100
得到的是:
SELECT STATEMENT, GOAL = CHOOSE 2472 1260238 20163808 2472
TABLE ACCESS FULL ERP ST_ITEMBARCODE_STOCK 2472 1260238 20163808 2472也是不会使用索引的.
烦请大侠解释一下,实在令人迷惑.
还有,哪位可以推荐一本SQL执行的内部机制. 比如如果解析不同的SQL语句. 谢谢!!!
针对此条,做了几个测试(stock_no是建立了索引):
1.1 select a.item_barcode, a.stock_no, a.balance_qty
from ERP.st_itembarcode_stock a
where a.stock_no like '%C'
得到的是
SELECT STATEMENT, GOAL = CHOOSE 2472 63013 1575325 2472
TABLE ACCESS FULL ERP ST_ITEMBARCODE_STOCK 2472 63013 1575325 2472
1.2 select a.item_barcode, a.stock_no, a.balance_qty
from ERP.st_itembarcode_stock a
where a.stock_no like 'C%'
得到的是:
SELECT STATEMENT, GOAL = CHOOSE 2472 67882 1697050 2472
TABLE ACCESS FULL ERP ST_ITEMBARCODE_STOCK 2472 67882 1697050 2472
1.3 select a.item_barcode, a.stock_no, a.balance_qty
from kxstepiii.st_itembarcode_stock a
where a.stock_no like ' C%' [color=#FF0000]-- 这里前面有一个空格
得到的是:
SELECT STATEMENT, GOAL = CHOOSE 1362 15559 388975 1362
TABLE ACCESS BY INDEX ROWID ERP ST_ITEMBARCODE_STOCK 1362 15559 388975 1362
INDEX RANGE SCAN ERP INX_ST_ITEM_BARCODESTOCK_2 87 15559 87[/color]使用'_'得到的也是一样的结果.
这个怎么解? 2.不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替
针对此条,做了几个测试(position_id是建立了索引):
2.1 select a.position_id , a.stock_no, a.balance_qty
from ERP.st_itembarcode_stock a
where a.position_id > 100
得到的是:
SELECT STATEMENT, GOAL = CHOOSE 2472 1260238 20163808 2472
TABLE ACCESS FULL ERP ST_ITEMBARCODE_STOCK 2472 1260238 20163808 2472也是不会使用索引的.
烦请大侠解释一下,实在令人迷惑.
还有,哪位可以推荐一本SQL执行的内部机制. 比如如果解析不同的SQL语句. 谢谢!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货