2012-05-16 91 views
3

我有一個約3,500,000項產品的表。該表在名爲title的列上具有全文索引。3,500,000行查詢優化,索引

以下查詢示例佔用了4秒,這是完全不能接受的,並在看方式,其中,以優化...去處/忠告理解。

基本上;這列應被索引,我應該拉這麼多列,具體個別或者是更快地把所有的列(有23個)等等等等

查詢例如:

SELECT PRid, title, Artist, author, actors, imageURL, prodcat, lowprice, 
highprice, prodcatID, description from products where 
((MATCH(title) AGAINST ('+blue +top' IN BOOLEAN MODE))) order by 
userrating desc limit 500 

回答

1

多少的唯一組合「標題」在那裏?您可能會發現將數據放入主數據表中具有外鍵的查找表中是值得的。

然後查詢數據時,你的兩個表連接在一起,並在過濾器適用於較小的表,這將花費更少的申請時間。然後,連接發生在數字字段上,您可以在主數據表中編入索引。

這將是比上3.5米行做了文字過濾顯著更快。假設數據中有很多重複,你的查找表可能只是這個大小的一小部分。

你還會發現,通過主數據讀取速度會更快,如果有一個數字,而不是文本字段,如行會更小,因此整體數據量更小。

讓所有基於文本數據轉換成的查找將讓一切更快,作爲主要的數據表可以隨即成爲固定格式,而不是動態的,這意味着索引表中查找數據時效率更高。

希望有幫助!

戴夫

2

你的第一個停靠港始終應EXPLAIN看什麼MySQL正在做的事情。我懷疑排序比匹配分數以外的東西可能沒有幫助 - 我不認爲MySQL將能夠使用用戶化的索引與全文索引同時進行排序。

我最後一次使用MySQL的全文搜索(幾年前承認),我發現它只是不夠快超過一百萬行左右。您可能需要考慮全文搜索引擎,如cloudsearch,elasticsearch,solr或sphinx。