提高mysql性能(like搜索替換 )


.mysql用find_in_set代替like搜索提高性能  

SELECT * from mobantestinfo1 where find_in_set('33',info2); 

.使用內部函數instr,可代替傳統的like方式查詢,並且速度更快。

instr函數,第一個參數是字段,第二個參數是要查詢的串,返回串的位置,第一個是1,如果沒找到就是0.

例如,

select name from tpl_user where 1 and instr(`name`,’jack’);

可查詢名字中帶jack的名字

.使用or的時候索引並不會生效,用union代替

.為了找出以“b”開頭的名字,使用“^”匹配名字的開始並且“[bB]”匹配小寫或大寫的“b”:

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
為了找出以“fy”結尾的名字,使用“$”匹配名字的結尾:
mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
為了找出包含一個“w”的名字,使用“[wW]”匹配小寫或大寫的“w”:
mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
既然如果一個正規表達式出現在值的任何地方,其模式匹配了,就不必再先前的查詢中在模式的兩方面放置一個通配符以使得它匹配整個值,就像如果你使用了一個SQL模式那樣。
為了找出包含正好5個字符的名字,使用“^”和“$”匹配名字的開始和結尾,和5個“.”實例在兩者之間:
mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
你也可以使用“{n}”“重復n次”操作符重寫先前的查詢:

mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";

.$sql1 = "...... title like someTitle%" (話費0.001秒)
$sql2 = "...... title like %someTitle%" (話費0.8秒)
這兩句的效率相差了800倍,這很可觀啊。
所以我有個想法:在不用分詞的方法的前提下,把存儲的title字段,加一個特別的前綴,比如"im_prefix",比如一條記錄的title="我是標題黨",那么存儲的時候就存儲為"im_prefix我是標題黨"。
這樣一來,我們要模糊查找"標題黨"這個關鍵詞的時候,就把sql寫成這樣:

$sql1 = "...... title like im_prefix%標題黨%" (花費0.001秒),前台顯示數據的時候,自然把取到的title過濾掉"im_prefix"這個前綴了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM