【发布时间】:2017-12-16 22:23:33
【问题描述】:
我有一个表“posts”,其中有一列“hot”(reddit 算法)。 'hot' 是小数:XXXXXX,XXXXXXX
这是我的查询:
SELECT * FROM posts ORDER BY hot DESC
现在我希望此查询使用“热”的索引。我试过了
ADD INDEX hot_index(hot)
并且 SHOW INDEXES FROM posts 显示索引确实已创建。
但是,当我在查询之前使用“EXPLAIN”运行查询时,我可以看到 MySQL 没有使用索引进行排序。为什么?我该如何改变呢?
非常感谢!
【问题讨论】:
-
您可以尝试通过
USE INDEX (hot_index)进行查询SELECT * FROM posts USE INDEX (hot_index) ORDER BY hot DESC进行索引提示,但也许MYSQL 已经将您的索引打折,因为没有真正的帮助 -
是的,不幸的是这并没有帮助。我也尝试使用 INT 而不是小数,但这也不会改变任何东西。
-
如果“SELECT * FROM posts ORDER BY hot DESC”是正在使用的查询,那么您需要表中的所有行,优化器会忽略它,因为它是全表扫描。正如 RiggsFolly 建议的那样,如果您确实想使用索引,可以尝试在查询中使用 USE INDEX 或 FORCE INDEX 提示。
-
使用 FORCE INDEX 提示。如果仍然没有使用索引,则在热列上放置 where 子句,如果仍然没有拾取索引,则运行 OPTIMIZE/ANALYZE table 命令并检查。
-
但是索引小数很奇怪,不是吗?因为一个十进制值涉及这么多的小数组合,所以想象所有的 0,00001、0,00002 或 0,00200 等。直到字段的全范围组合作为键......看起来没有真正的用处吗?跨度>
标签: mysql performance indexing sql-order-by database-indexes