2

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

select * from table X where some_condition order by id desc

一般来说,“order by id”是否会大大降低查询速度?

具体来说,对于像这样的查询:

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

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

在所有情况下,都假定 ID 是自动递增的。


我的困惑来自以下关于 order-by 优化的指南:

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

4

3 回答 3

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

在这样的查询中,您肯定需要 some_col 上的索引。根据我的说法,(some_col)的索引应该足够好于(some_col,id)。

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

此外,当您在 some_col 上搜索时,永远不会使用 (id,some_Col) 索引,而 (some_col, id) 将是。

于 2013-03-17T16:52:28.733 回答
2

(some_col) 上的索引就足够了,因为 MySql 将主键添加为 innodb 表中索引的一部分。因此,您将隐含地将 (some_col, id) 作为索引。您可以查看这篇文章以获取更多信息: MySQL 可以使用二级索引中的主键值吗?

于 2015-11-23T12:52:00.280 回答
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)

但当然是的,一个 index onid和一个 index onsome_col对加快查询非常有用。

于 2013-03-17T16:51:23.547 回答