我有一个包含3列的类别查找表 MyISAM约500k行
listing_id | int(11)
category_id | int(11)
parent_category_id | int(11)
在按类别浏览或搜索时,此表已加入列表中。
当在父类别上搜索时,为每个category_id重复parent_category_id,查询包括
SQL_CALC_FOUND_ROWS DISTINCT ...
获取唯一行和找到的结果总数。 此外,我们还有一系列WHERE和ORDER BY混合使用(来自用户过滤器)
我尝试了两个选项;
删除parent_category_id列并将唯一父项作为category_id插入。 这样就可以从查询中删除DISTINCT,但作为一个缺点,它也增加了要扫描的行数,但是对于大多数常见情况,我可以通过这种方式获得索引。我做了一个测试,这看起来效果很好。查询从20多秒到0.4秒 或者我应该为parent_category_id创建一个单独的表。?例如(listing_is,parent_id)
BTW:列表可以包含多个父级和多个类别。
你会推荐什么?
提前致谢
答案 0 :(得分:0)
将parent_category_id规范化为单独的表。在这种情况下,较小索引的好处超过了包含更多数据的单个表。适合内存的索引总是更快。