mysql like性能優化

網上很多優化like的方法,無非下面幾種,抄來抄去的。
我用213萬條數據,每條數據50個字段左右(用的真實的生產環境的mysql數據庫,和真實的生產環境的數據),做了性能測試;時間記錄的次數不多,但是基本都做了10次左右,時間誤差不大的,就只記錄了3次,結果如下:
結論:
1.LOCATE,INSTR,REGEXP三個函數,效果在like面前沒有任何優勢。(那些說有明顯優勢的,難道是用遠超213萬條數據測試出來的?)
2.效果好壞,取決於能不能用上索引。
3.like,如果要用,那用左匹配,效果是最好的,因爲可以用上索引,其他的方式,索引會失效的,速度自然很低。
4.並沒有發現什麼有效的優化方式。
5.搜索業務,數據量大,不如直接用專業的搜索引擎,比如es之類的。

-- 6015ms   5996ms  6008ms  不用索引

SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('%','奧的斯','%');

EXPLAIN SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('%','飛鳴','%');

-- 5975ms  6037ms  5987ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('%','有限公司');

-- 2ms 2ms 用索引
SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('杭州飛鳴','%');
-- 2ms 2ms  用索引
EXPLAIN  SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('浙江君時','%');



-- 6265ms  6209ms  不用索引
SELECT * FROM `ent_file` a WHERE LOCATE('杭州飛鳴',a.`ent_name` ) > 0;

-- 6289ms   6234ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE LOCATE('奧的斯',a.`ent_name` ) > 0;


-- 6322ms   6377ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE INSTR(a.`ent_name`,'奧的斯') > 0;



-- 5ms 3ms 31ms 4ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE a.`ent_name`  REGEXP '^杭州' ;

-- 87ms 78ms 75ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE a.`ent_name`  REGEXP '有限責任公司$' ;

- 6056ms  6032ms 不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE a.`ent_name`  REGEXP '集團$' ;
SELECT * FROM `ent_file` a WHERE REVERSE(a.`ent_name`) LIKE REVERSE(CONCAT('%','奧的斯')) or a.`ent_name` LIKE CONCAT('奧的斯','%');

原文地址:https://blog.csdn.net/weixin_39800144/article/details/81510785

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章