2016-07-26 29 views
0

我有一個有200萬行的Mysql表。 大小是600Mb。在一個200萬行的表中加速慢計數

此查詢需要2秒鐘。 我不知道如何加快速度。該表已經是Myisam格式。 我不知道我是否達到了選擇計數緩慢的極限。

SELECT COUNT(video) FROM yvideos use index (PRIMARY) WHERE rate>='70' AND tags LIKE '%;car;%' 

感謝所有

+0

'rate'是否存儲爲數值?您可以嘗試使用WHERE rate> = 70而不是WHERE rate> ='70',因爲數字比較應該更快。 – trevor

回答

0

是的,它可以被優化。

首先,您正在使用LIKE進行全面掃描,因爲MySQL不能使用左變量(對於';car;%'而不是'%;car;%')的索引。其次,MySQL(大多數情況下)不會使用多於一個索引的SELECT,所以如果您有兩個單獨的索引ratetags,則只會使用一個索引。

因此,要處理這些事情我建議:1。 使用全文索引tags列, 2.用兩個單獨的查詢一個查詢「膠水」與INNER JOIN結果(等於WHERE ... AND ...在這種情況下) 。

那麼到底:

SELECT t1.* FROM 
    (SELECT * FROM yvideos WHERE rate >= 60) t1 
INNER JOIN 
    (SELECT * FROM yvideos WHERE MATCH (tags) AGAINST ('+car +russia -usa' IN BOOLEAN MODE)) t2 
USING (id); 

Live example on SQLFiddle

對此查詢執行EXPLAIN並查看計劃。現在沒有完全掃描,所有的過濾都使用索引完成。

有關布爾全文搜索的更多信息,您可以閱讀a documetation

順便提一下,InnoDB和MyISAM都支持全文索引,因此您可以決定引擎。

相關問題