萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 字串查找函數 INSTR、LOCATE、POSITION 差異與效能比較

函數語法對照

函數語法說明
INSTRINSTR(str, substr)回傳 substr 在 str 中首次出現的位置,參數順序與 LOCATE 相反。
LOCATELOCATE(substr, str)
LOCATE(substr, str, pos)
第 1 種同 INSTR;第 2 種可指定起始搜尋位置 pos。
POSITIONPOSITION(substr IN str)標準 SQL 語法,功能同 LOCATE 雙參數形式。

範例演示

SELECT INSTR('foobarbar', 'bar');   -- 4
SELECT INSTR('xbar', 'foobar');     -- 0

SELECT LOCATE('bar', 'foobarbar');       -- 4
SELECT LOCATE('xbar', 'foobar');         -- 0
SELECT LOCATE('bar', 'foobarbar', 5);    -- 7 (從第 5 字元開始找)

SELECT POSITION('bar' IN 'foobarbar');   -- 4
SELECT POSITION('xbar' IN 'foobar');     -- 0

三者皆支援多位元組字元,只有當至少一個參數為二進位字串時才區分大小寫。

實測效能比較

測試資料表 o_soft,欄位 tid2 為 VARCHAR:

-- 使用 LOCATE
SELECT * FROM `o_soft` WHERE LOCATE('d200', tid2) > 0;
-- 耗時 0.0050 秒

-- 使用 INSTR
SELECT * FROM `o_soft` WHERE INSTR('d200', tid2) > 0;
-- 耗時 0.0009 秒

結論:在單純字串包含判斷上,INSTR 效能顯著優於 LOCATE。若需指定起始位置搜尋,才必須使用 LOCATE 三參數形式。

copyright © 萬盛學電腦網 all rights reserved