like vs substr?

   一直認爲substr(field,1,2)='11'會比 field like '11%'快,但是呢,有人也提出一個看法。如果field字段設置了索引,那麼like方式要優於substr。其實一旦可以建索引,那麼我還可以建個函數索引來讓substr也使用上索引(CREATE INDEX my_substr_idx ON my_table( substr( field,1,2 ) );)。所以在有索引的情況下like 不佔優勢。

那麼下面討論沒有索引的情況:

反正在沒有索引的情況下,大數據的表(千萬行),oracle下我測出來是substr贏了,而且贏了很多。

看看like vs instr:

地址:http://rdc.taobao.com/blog/dba/html/246_like_instr_performance.html

t表中將近有1100萬數據,很多時候,我們要進行字符串匹配,在SQL語句中,我們通常使用like來達到我們搜索的目標。但經過實際測試發現,like的效率與instr函數差別相當大。下面是一些測試結果:

SQL> set timing on
SQL> select count(*) from t where instr(title,’手冊’)>0;

COUNT(*)
———-
65881

Elapsed: 00:00:11.04
SQL> select count(*) from t where title like ‘%手冊%’;

COUNT(*)
———-
65881

Elapsed: 00:00:31.47
SQL> select count(*) from t where instr(title,’手冊’)=0;

COUNT(*)
———-
11554580

Elapsed: 00:00:11.31
SQL> select count(*) from t where title not like ‘%手冊%’;

COUNT(*)
———-
11554580

另外,我在另外一個2億多的表,使用8個並行,使用like查詢很久都不出來結果,但使用instr,4分鐘即完成查找,性能是相當的好。這些小技巧用好,工作效率提高不少。通過上面的測試說明,ORACLE內建的一些函數,是經過相當程度的優化的。

--EOF--

Trackback:http://rdc.taobao.com/blog/dba/html/246_like_instr_performance.html/trackback

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章