表結構
id 主鍵
name varchar 50
SELECT * FROM `abc` WHERE name like '%123%' limit 0,10
SELECT count(*) FROM `abc` WHERE name like '%123%'
一個是查詢10條記錄,二個是統計總數
資料庫引擎目前是使用的 MyISAM
uj5u.com熱心網友回復:
沒好辦法,like會全表掃描uj5u.com熱心網友回復:
加索引,使用等于判斷會很快uj5u.com熱心網友回復:
你這種like前后加%的,加什么都沒用,都慢,你看能不能從你的資料出發,拆分你的資料,不要用like查詢uj5u.com熱心網友回復:
首先查不要用* ,再有適當建索引,uj5u.com熱心網友回復:
我這而才300W資料,,直接COUNT,不帶任何查詢條件,也慢,,直接where id>0,也慢uj5u.com熱心網友回復:
全表掃描, name 加索引, like 前面的百分號確認好了去掉,這樣能使用到索引uj5u.com熱心網友回復:
like 的變數前面加了%,不走索引,所以慢。uj5u.com熱心網友回復:
?DDL 索引http://www.verejava.com/?id=1717413695356
uj5u.com熱心網友回復:
如果查詢sql固定,可以通過預處理的方式處理這個場景,建議用全文索引去查詢,不能直接查資料庫的
uj5u.com熱心網友回復:
試一下,不確定行不行。SELECT * FROM `abc` WHERE NAME REGEXP '123' LIMIT 0,10;
SELECT COUNT(*) FROM `abc` WHERE NAME REGEXP '123' ;
uj5u.com熱心網友回復:
樓上都說了索引這個是必須要的
%like%這種肯定不行,不管怎么寫都慢,如果實在是要Like ,最好就是針對索引欄位
SELECT * FROM `abc` WHERE name like '123%' limit 0,10
count(*)統計 改成Count(0), 如果name沒索引,一千萬資料估計要幾十秒左右。建個索引,速度應該會在幾秒之內。
SELECT count(0) FROM `abc` WHERE name like '123%'
uj5u.com熱心網友回復:
樓主你好,建議如下1:查詢多的欄位,如name,加上索引
2:查詢欄位,可以把欄位寫出來,不要用 select *
3:1000萬的單張表,就算是針對阿里云的RDB(SSD,高度優化)都比較大,建議樓主考慮分表操作
uj5u.com熱心網友回復:
增加全文索:欄位full 索引設定mysql 檔案:
port = 3306
innodb_ft_min_token_size=1
ft_min_word_len=1
查詢方式:
MATCH(`欄位名`) AGAINST('值')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/60785.html
標籤:高性能數據庫開發
