【发布时间】:2017-06-08 16:07:09
【问题描述】:
所以我有一个表格,可能有数百万行,
user | points
---------------
user1 | 10
user2 | 12
user3 | 7
...
想SELECT * FROM mytable ORDER BY points LIMIT 100, 1000
现在它工作正常,但速度非常慢(在大表上),因为它拒绝使用任何类型的索引,而是执行全表扫描。我怎样才能提高效率?
我的第一个(显而易见的)想法是在 points DESC 上使用索引,但后来我发现 MySQL 根本不支持这些。
接下来,我尝试反转点上的符号,这意味着本质上在 - 点上有一个升序索引,这也没有帮助,因为它不使用索引进行排序
最后,我尝试使用force index,这几乎没有提高性能,因为它仍然获取整个表,但没有排序(在EXPLAIN 中使用filesort: false)
我确信这一定是一个已解决的问题,但我没有在网上找到任何有用的信息。任何提示将不胜感激。
【问题讨论】:
-
如果您的表中有“数百万行”,那么对于您正在运行的硬件而言,您的数据库可能太大了。然而,结构本身可能与它有很大关系。您的数据库只是用户/点吗?如,主键是 varchar?还是?
-
这个'top n'怎么样?
-
@Strawberry 我认为 MySql 不支持
top n,是吗? -
前 10 名 =
ORDER BY points DESC LIMIT 10 -
阅读这篇文章,尤其是关于性能问题的部分。 meta.stackoverflow.com/questions/271055/…
标签: mysql