对于许多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
答案 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
上的索引对于加快查询非常有用。