簡體   English   中英

使用FULLTEXT索引,MySQL查詢速度慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM