2012-05-16 57 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。