【发布时间】:2015-12-03 05:46:28
【问题描述】:
在我们的应用程序中,我们有一个页面向用户显示一组数据,实际上是其中的一部分。它还允许用户通过自定义字段对其进行排序。所以最后一切都归结为这样的查询:
SELECT name, info, description FROM mytable
WHERE active = 1 -- Some filtering by indexed column
ORDER BY name LIMIT 0,50; -- Just a part of it
只要表的大小相对较小(仅在我们部门本地使用),这工作得很好。但是现在我们必须扩展这个应用程序。让我们假设,该表有大约一百万条记录(我们预计这很快就会发生)。订购会发生什么?我是否理解正确,为了执行此查询,MySQL 每次都必须对一百万条记录进行排序并给出其中的一部分?这似乎是一个非常耗费资源的操作。
我的想法只是关闭该功能并且不要让用户选择他们的自定义排序(也许只是过滤),以便顺序是自然的(按 id 降序排列,我相信索引可以处理那个)。
或者有没有办法让这个查询在排序时工作得更快?
更新:
这是我从官方 MySQL developer page 中读到的内容。
在某些情况下,MySQL 无法使用索引来解析 ORDER BY, 尽管它仍然使用索引来查找与 WHERE 匹配的行 条款。这些案例包括:
....
用于的密钥 获取的行与 ORDER BY 中使用的不同:
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
所以是的,看起来 mysql 会遇到这样的查询问题?那么,我该怎么办 - 根本不使用订单部分?
【问题讨论】:
-
如果您在
name列上有索引,那么我不认为排序是一件特别糟糕的事情。