一
.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 "^.{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"這個前綴了