2011-12-27 26 views
4

有人能告訴我在Oracle中INSTRLIKE之間的區別嗎?Oracle中的INSTR和LIKE有什麼區別?

Oracle10g中哪一個更快?

+0

另請參閱http://stackoverflow.com/questions/1197026/is-substr-or-like-faster-in-oracle – Vadzim 2016-12-13 11:38:55

+0

對於[MySql](https://stackoverflow.com/questions/2451608/which-是更快的instr或者像這樣[回覆](https://stackoverflow.com/a/22171511/480894)說INSTR更快。 – Roland 2017-06-13 11:27:28

回答

7

這取決於數據和模式。如果使用like 'a%',則Oracle可以使用BTree索引查找匹配項,因爲它可以使用模式的開始搜索btree,然後只考慮子樹。

這不適用於LIKE '%a',但您可以通過創建一個計算列來反轉您要搜索的列中的所有值(以便獲得上述模式)來解決此問題。

如果使用散列索引,那麼Oracle可以做的事情很少,但是需要掃描整個索引。只有幾個不同的值時,它可能會更快。

我不確定INSTR是否可以使用索引,因爲它沒有固定的錨點。

因此,像所有的性能問題:

  1. 填寫一些真實的測試數據的數據庫,並運行一些測試。
  2. 始終編寫代碼的方式,它可以很容易地以後進行優化,當你知道有關瓶頸
  3. 決不猜測可能是緩慢的。 90%的時間你會錯的。始終測量。
+1

+1爲你錯了90%的時間 – rene 2011-12-27 16:10:22

+0

看到我的回答(INSTR更快):http://stackoverflow.com/a/30781872/480894 – Roland 2015-06-11 13:14:59

2

INSTR是自Oracle 8i以來用於查找子字符串的oracle函數,LIKE是主要用於匹配具有通配符的字符串的SQL條件。

我希望INSTR稍微快一點,因爲它不那麼複雜,但我沒有測量它。

+0

也許INSTR不那麼複雜,但是語句的性能並不取決於所使用的函數是多少使用一些cpu週期來評估,而是從必須檢索和評估多少數據來獲得結果。 – miracle173 2017-06-09 05:47:42

3
  • INSTR搜索某個字符串在另一字符串,與方向開始位置的選擇等
  • LIKE是簡單的模式匹配和標準SQL

無論是將「更快」,始終堅持,因爲他們不具有可比性:這取決於你需要做什麼,你的數據,你如何搜索等

1
+0

該頁面不可用。 – miracle173 2017-06-09 05:32:13

+0

謝謝您搜索了有效鏈接。但我也有其他的抱怨。不支持僅包含鏈接的stackexchange答案。鏈接的相關內容也應在帖子中提供。但我認爲在這個環節提出的測量是沒有意義的。 'instr(title,'manual')> 0'和'title manual%'這樣的標題之間的比較。第一個表達式搜索以'manual'開頭的標題,後者搜索包含'manual'的標題。 – miracle173 2017-06-13 06:28:40

+0

除此之外,我們被告知該表有11個Mio。行,我們可以看到流逝的時間,我們不知道表的結構,標題字段的長度,沒有執行計劃,沒有統計,沒有關於測試環境。這個測試應該被忽略。 – miracle173 2017-06-13 06:29:03