gpt4 book ai didi

MySQL 十进制列 ORDER BY 查询索引

转载 作者:行者123 更新时间:2023-11-29 06:57:26 25 4
gpt4 key购买 nike

我有一个表“posts”,其中包含“hot”列(reddit 算法)。 'hot' 是小数:XXXXX,XXXXXXX

这是我的查询:

SELECT * FROM posts ORDER BY hot DESC

现在我希望此查询使用“热”索引。我试过了

ADD INDEX hot_index(hot)

并且 SHOW INDEXES FROM posts 显示索引确实已创建。

但是,当我在前面加上“EXPLAIN”运行查询时,我可以看到 MySQL 没有使用索引进行排序。为什么?我怎样才能改变它?

非常感谢!

最佳答案

显然,MySQL 认为顺序读取整个表并即时执行排序比读取索引(从而具有排序顺序)更快,但随后必须逐一访问帖子记录。这是一个有效的假设。

如果这会导致性能问题,那么您可能需要一个覆盖索引,从排序列开始:

create index idx on posts(hot, col1, col2, col3 ...)

使用select *,您必须包含该索引中的所有列。

使用覆盖索引,DBMS 可以从索引本身获取所有值,因此不必再访问表。

无论如何,DBMS 仍然有可能更喜欢按顺序读取表,但很可能不会。

另一点是你按降序排序,但索引是升序。当涉及排序时,我会尝试使索引与排序顺序完全匹配:

create index idx on posts(hot desc, ...)

关于MySQL 十进制列 ORDER BY 查询索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45058550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com