mysql查询用哪里和命令需要很长时间

时间:2013-12-06 16:51:51

标签: mysql database performance

我有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)快速查询

感谢

2 个答案:

答案 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,从而使其更快。

也可能是你的索引按升序排序,所以当你要求降序时,它需要做更多的工作才能按顺序恢复它