按主键和索引排序

时间:2013-03-17 16:43:41

标签: mysql indexing

对于许多SQL查询,“按id desc排序”是获取最新行的必需组件。一般查询将类似于

select * from table X where some_condition order by id desc

一般来说,“按ID排序”是否会使查询速度变慢?

具体来说,对于查询:

select * from table X where some_col = some_value order by id desc

我们真的需要添加索引(some_col,id)来加速查询吗?

在所有情况下,都假设ID是自动增量。


我的困惑来自以下有关订单优化的指南:

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

2 个答案:

答案 0 :(得分:2)

select * from table X where some_col = some_value order by id desc

在这样的查询中,您需要some_col上的索引。根据我的指数(some_col)应该足够好(some_col,id)。

MySQL merge index应该可以帮助您使用id上的索引进行排序。

当你搜索some_col时,也永远不会使用(id,some_Col)索引,而(some_col,id)将是。

答案 1 :(得分:0)

要获得第一行,您还可以使用它:

SELECT *
FROM tableX
WHERE id = (SELECT MIN(id)
            FROM tableX
            WHERE some conditions)

这是最后一次:

SELECT *
FROM tableX
WHERE id = (SELECT MAX(id)
            FROM tableX
            WHERE some conditions)

但当然是的,id上的索引和some_col上的索引对于加快查询非常有用。