我有7百万条记录的mysql数据库
当我运行像
这样的查询时select * from data where cat_id=12 order by id desc limit 0,30
查询需要很长时间,如0.4603秒
但是同一个查询out(where cat_id=12
)或out(order by id desc
)非常快
查询需要很长时间,如0.0002秒
我有cat_id和id
的索引有任何方法可以使用(where和order by)快速查询
感谢
答案 0 :(得分:3)
创建一个结合了cat_id和id的复合索引。有关语法和示例,请参阅http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html。
如果您仅声明'cat_id = 12',您将获得所有匹配的行,因为索引很快。但是这些行不会是ordererd,所以mysql必须将它们全部读入临时表并对该表进行排序,这很慢。
类似地,'按id desc排序'将快速排序行,但mysql必须读取所有行以找出哪些'cat_id = 12',这很慢。
综合指数应解决这些问题。
答案 1 :(得分:0)
它在没有order by
的情况下快速运行,因为当您按DESC
编写顺序时,它首先遍历所有行,然后按降序选择。删除条件会使其默认为ASCENDING,从而使其更快。
也可能是你的索引按升序排序,所以当你要求降序时,它需要做更多的工作才能按顺序恢复它