[英]MySQL query slow with FULLTEXT index
我有1個MyISAM表,620,000行。 我在具有2GB RAM的雙核服務器上運行XAMPP。 Apache作為Windows服務安裝,MySQL由XAMPP控制面板控制。
以下查詢需要30秒以上才能運行。
select `id`,`product_name`,`search_price`,`field1`,`field2`,
`field3`,`field4`
from `all`
where MATCH (`product_name`) AGAINST ('searchterm')
AND `search_price` BETWEEN 0 AND 1000
ORDER BY `search_price` DESC
LIMIT 0, 30
我在product_name
上有一個FULLTEXT索引,在search_price
上有一個BTREE,在id
上有自動增量
如果我解釋上面的查詢結果是:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE all fulltext search_price,FULLTEXT_product_name FULLTEXT_product_name 0 NULL 1 Using where; Using filesort
如何加快此查詢? 它應該在620,000行的桌子上花這么長時間嗎?
我剛剛注意到這只發生在數據庫暫時沒有被查詢的情況下,所以我猜測這是與緩存有關,第一個查詢需要30多秒,然后如果我再次嘗試查詢需要1秒
MySQL將首先進行全文搜索,然后查找其余信息,過濾價格,按價格排序,最后交付30.基本上沒有辦法縮短該過程。
是的,緩存可能是30秒變為1秒的解釋。
切換到InnoDB(現在有FULLTEXT
)可能會帶來一些好處。
如果完全運行MyISAM,您是否將key_buffer_size
設置為可用RAM的大約20%? 如果您比此低得多(或更高),則可能會導致性能問題。
如果完全運行InnoDB,請將innodb_buffer_pool_size
設置為可用RAM的大約70%。
當表的大小超過300,000時,MySQL處理FULLTEXT的能力有限。 如果您使用非常常見的單詞作為搜索關鍵字(通常標記為停用詞的in,the,of等),它將更糟糕。 我建議使用Sphinx全文搜索 / Apache Lucene
Stackoverflow鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.