gpt4 book ai didi

mysql - 为什么 MySQL 不会自动为适当的查询创建临时索引?

转载 作者:行者123 更新时间:2023-11-29 01:58:51 25 4
gpt4 key购买 nike

我知道这是一种元编程问题,但我假设这里有足够多的有经验的人可以给出一个不错的答案。

我只是再次构建查询,以从表中检索一些数据。

SELECT pl.field1, pl.field2
FROM table pl
LEFT JOIN table2 dp on pl.field1 = dp.field1
WHERE dp.field1 IS NULL

执行此查询需要很长时间(1800 多秒)。

在我厌倦了等待并努力EXPLAIN 查询之后,结果发现进行了全表扫描。

我在 dp.field1 上创建了一个索引,此后查询几乎是即时的,创建该索引只用了不到一秒钟。

EXPLAIN 来看,这并不难确定。为什么 MySQL 不能或不会自动执行此操作?只花一秒钟创建该索引将使查询变得即时,因此 MySQL 理论上可以创建一个临时索引,使用它进行查询,然后再次删除它,这仍然比替代方法快几个数量级。

我期待“确保设计好的模式”或“mysql 只是按照您的要求去做”这样的常见答案,但我想知道是否有技术原因导致这是一个坏主意。

最佳答案

对于基数较低的列,使用 B 树索引不是一个好主意。 B 树会因基数较低而退化,与全表扫描相比,实际上会增加查询时间。

所以总是创建 B-Tree 索引不是一个好主意。至少它也必须考虑基数。也许还有其他几件事。

关于mysql - 为什么 MySQL 不会自动为适当的查询创建临时索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542697/

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