ORDER BY如何在MySQL中运行?

时间:2014-02-13 15:13:22

标签: mysql sql sql-order-by

假设其中有一个包含1亿条记录的表:

+---------+---------+------+
| user_id | post_id | date |
+---------+---------+------+

我们希望拥有最新的30条记录,其中#1的用户已发布。

SELECT * FROM users_posts WHERE user_id = 1 ORDER BY date DESC LIMIT 30

MySQL如何在表中搜索?它是否搜索所有匹配(完全扫描)找到所有匹配,然后按日期排序?

如果是(完全扫描),我们如何编辑此查询以限制它搜索最新记录,直到找到30个匹配。 (提高阅读速度,有更好的表现)

先谢谢。

1 个答案:

答案 0 :(得分:4)

如果您希望此查询获得最佳效果:

SELECT *
FROM users_posts
WHERE user_id = 1
ORDER BY date DESC;

然后你需要users_posts(user_id, date)上的索引。这将允许SQL引擎仅使用索引来定义正在使用的行集。首先,它将使用user_id来满足where子句。然后它将date部分用于order by。它仍然需要查找原始数据页中的记录,以获取select所需的所有列。

如果要将此限制为30行,请添加limit 30

SELECT *
FROM users_posts
WHERE user_id = 1
ORDER BY date DESC
LIMIT 30;

使用上述索引,这将提高性能。如果没有索引,引擎将必须扫描所有数据,对匹配where子句的数据进行排序,然后应用limit - 换句话说,它不会是一个绩效改善。