回答
這取決於數據和模式。如果使用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. SQL中的「LIKE」和「=」有什麼區別?
- 2. SQLite中LIKE和GLOB有什麼區別?
- 3. Oracle和Microsoft模式有什麼區別?
- 4. 有什麼區別`和$(Bash中有什麼區別?
- 5. LIKE和= MYSQL中的區別?
- 6. Oracle 12c中的JSON_VALUE和JSON_TEXTCONTAINS有什麼區別?
- 7. Oracle中的Views和Materialized Views有什麼區別?
- 8. 在Oracle數據庫中,ROWNUM和ROW_NUMBER有什麼區別?
- 9. ==和===有什麼區別?
- 10. ==和===有什麼區別?
- 11. 有什麼區別? :和||
- 12. ==和===有什麼區別?
- 13. '=='和'==='有什麼區別?
- 14. `&`和`ref`有什麼區別?
- 15. 有什麼區別:。!和:r!?
- 16. | 0和~~有什麼區別?
- 17. Appender和〜有什麼區別?
- 18. python中的{}和[]有什麼區別?
- 19. 列表中的:::和++有什麼區別?
- 20. console.log中的和+有什麼區別?
- 21. Perl中的'eq'和'=〜'有什麼區別?
- 22. Prolog中的'和「有什麼區別?
- 23. MATLAB中的{}和[]有什麼區別?
- 24. PHP中的 - >和::有什麼區別?
- 25. xtype和別名有什麼區別?
- 26. XSD中IDREF和IDREFS有什麼區別?
- 27. COM中IDispatch和IUnkown有什麼區別?
- 28. 在JavaScript中,'\'和'\ n'有什麼區別?
- 29. =和在mysql中有什麼區別?
- 30. Lisp中'和#'有什麼區別?
另請參閱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