回答
這取決於數據和模式。如果使用like 'a%'
,則Oracle可以使用BTree索引查找匹配項,因爲它可以使用模式的開始搜索btree,然後只考慮子樹。
這不適用於LIKE '%a'
,但您可以通過創建一個計算列來反轉您要搜索的列中的所有值(以便獲得上述模式)來解決此問題。
如果使用散列索引,那麼Oracle可以做的事情很少,但是需要掃描整個索引。只有幾個不同的值時,它可能會更快。
我不確定INSTR
是否可以使用索引,因爲它沒有固定的錨點。
因此,像所有的性能問題:
- 填寫一些真實的測試數據的數據庫,並運行一些測試。
- 始終編寫代碼的方式,它可以很容易地以後進行優化,當你知道有關瓶頸
- 決不猜測可能是緩慢的。 90%的時間你會錯的。始終測量。
也許INSTR不那麼複雜,但是語句的性能並不取決於所使用的函數是多少使用一些cpu週期來評估,而是從必須檢索和評估多少數據來獲得結果。 – miracle173 2017-06-09 05:47:42
這個頁面說INSTR
是fa韋伯斯特:
http://oracle.veryoo.com/2013/03/performance-comparation-between-like.html
編輯:由於上述 歸檔鏈接不再可用: http://web.archive.org/web/20160301212009/http://oracle.veryoo.com/2013/03/performance-comparation-between-like.html
該頁面不可用。 – miracle173 2017-06-09 05:32:13
謝謝您搜索了有效鏈接。但我也有其他的抱怨。不支持僅包含鏈接的stackexchange答案。鏈接的相關內容也應在帖子中提供。但我認爲在這個環節提出的測量是沒有意義的。 'instr(title,'manual')> 0'和'title manual%'這樣的標題之間的比較。第一個表達式搜索以'manual'開頭的標題,後者搜索包含'manual'的標題。 – miracle173 2017-06-13 06:28:40
除此之外,我們被告知該表有11個Mio。行,我們可以看到流逝的時間,我們不知道表的結構,標題字段的長度,沒有執行計劃,沒有統計,沒有關於測試環境。這個測試應該被忽略。 – miracle173 2017-06-13 06:29:03
- 1. INSTR()和CHARINDEX()有什麼區別嗎?
- 2. SQL中的「LIKE」和「=」有什麼區別?
- 3. SQLite中LIKE和GLOB有什麼區別?
- 4. LIKE和REGEXP有什麼區別?
- 5. ABAP中like和like行之間有什麼區別?
- 6. Oracle:=和in有什麼區別?
- 7. Oracle /和sys有什麼區別?
- 8. ibm jdk和oracle jdk有什麼區別?
- 9. Oracle和Microsoft模式有什麼區別?
- 10. 有什麼區別`和$(Bash中有什麼區別?
- 11. LIKE和= MYSQL中的區別?
- 12. Oracle中的ADMIN選項和GRANT選項有什麼區別
- 13. Oracle 12c中的JSON_VALUE和JSON_TEXTCONTAINS有什麼區別?
- 14. Oracle中的Views和Materialized Views有什麼區別?
- 15. oracle中的RANK()和DENSE_RANK()函數有什麼區別?
- 16. 在oracle中嵌套表和對象類型有什麼區別?
- 17. 在Oracle數據庫中,ROWNUM和ROW_NUMBER有什麼區別?
- 18. 有什麼區別? :和||
- 19. &&和||有什麼區別?
- 20. 「/」和「/ *」有什麼區別?
- 21. 有什麼區別:。!和:r!?
- 22. ==和===有什麼區別?
- 23. Appender和〜有什麼區別?
- 24. $ @和$ *有什麼區別?
- 25. is和=有什麼區別?
- 26. #.00和#。##有什麼區別?
- 27. `==`和`is`有什麼區別?
- 28. '=='和'==='有什麼區別?
- 29. /和/#/有什麼區別?
- 30. | 0和~~有什麼區別?
另請參閱http://stackoverflow.com/questions/1197026/is-substr-or-like-faster-in-oracle – Vadzim 2016-12-13 11:38:55
對於[MySql](https://stackoverflow.com/questions/2451608/which-是更快的instr或者像這樣[回覆](https://stackoverflow.com/a/22171511/480894)說INSTR更快。 – Roland 2017-06-13 11:27:28