有傳言說,這個:性能正則表達式的VS LIKE在MySQL查詢
SELECT * FROM lineage_string where lineage like '%179%' and lineage regexp '(^|/)179(/|$)'
會比這個速度更快:
SELECT * FROM lineage_string where lineage regexp '(^|/)179(/|$)'
誰能證實?或者知道一個體面的方式來測試這種查詢的速度。 謝謝
有傳言說,這個:性能正則表達式的VS LIKE在MySQL查詢
SELECT * FROM lineage_string where lineage like '%179%' and lineage regexp '(^|/)179(/|$)'
會比這個速度更快:
SELECT * FROM lineage_string where lineage regexp '(^|/)179(/|$)'
誰能證實?或者知道一個體面的方式來測試這種查詢的速度。 謝謝
它可能會更快,因爲可以更快速地評估LIKE條件,然後正則表達式,因此如果大多數行失敗,測試可能會更快。但是,如果大多數行都成功了,那麼它將會變慢,因爲必須爲成功的行而不是僅僅一次運行兩個測試。它也取決於優化器選擇先運行哪個表達式。
一個更大的加速可以,如果你有這樣的事情被目擊:
SELECT * FROM (
SELECT * FROM lineage_string
WHERE lineage LIKE '179%'
) WHERE lineage regexp '^179(/|$)'
現在的指數可以用來尋找可能行,因爲LIKE「179%」是sargable。許多行根本不需要檢查。
一如既往,最好的方法就是根據您的實際數據自行測量。
是的,它可能會快一點點,因爲標準SQL LIKE
比完整正則表達式解析器更簡單的比較操作。
但是,實際上兩者都很慢,因爲它們都不能使用索引。 (LIKE
可以使用索引如果匹配字符串不是以一個通配符開始,但這裏並非如此。)
如果您擔心速度,你應該改變你的架構,這樣就可以直接把179
在列和索引中,而不必在每一行上手動檢查字符串。
根據這個不太受支持的博客文章,LIKE比REGEXP快10倍(數據可能有所不同,索引使用上沒有任何字詞等):http://thingsilearn.wordpress.com/2008/02/28/mysql-query -speed-regexp-vs-like/ – 2010-04-29 19:14:23
額外的鏈接 - 同樣的故事,LIKE更快:http://lists.mysql.com/mysql/101728 – 2010-04-29 19:16:26
它'TEXT'和'VARCHAR'字段肯定更快我試過了上。我記得在博客評論中看到** REGEXP **對於'UNSIGNED'字段比** LIKE **快,但我無法證實這一點。 – inhan 2012-08-16 03:24:54