gpt4 book ai didi

SQLite:分析的缺点

转载 作者:行者123 更新时间:2023-12-03 16:32:04 25 4
gpt4 key购买 nike

ANALYZE 命令是否有任何缺点(接受稍大的数据库)?如果不是,为什么默认不执行?

最佳答案

还有另一个缺点。 ANALYZE 结果可能会导致查询规划器忽略您真正想要使用的索引。

例如,假设您有一个带有 bool 列“isSpecial”的表。大多数行的 isSpecial = 0,但也有一些行的 isSpecial = 1。

当您查询 SELECT * FROM MyTable WHERE isSpecial = 1 ,在没有 ANALYZE 数据的情况下,查询计划器将假定 isSpecial 上的索引是好的并会使用它。在这种情况下,它碰巧是对的。如果你要做 isSpecial = 0 那么它仍然会使用索引,这将是低效的,所以不要这样做。

运行 ANALYZE 后,查询规划器会知道 isSpecial 只有两个值,因此索引的选择性很差。所以它不会使用它,即使在上面的 isSpecial = 1 情况下也是如此。要知道 isSpecial 值分布非常不均匀,它需要仅在使用 SQLITE_ENABLE_STAT4 选项编译时收集的数据。该选项默认情况下不启用,它有一个很大的缺点:它使准备好的语句的查询计划取决于其绑定(bind)值,因此 sqlite 将更频繁地重新准备语句。 (可能每次都执行,具体不知道)

tl;dr:运行 ANALYZE 几乎不可能在 bool 字段上使用索引,即使您知道它们会有所帮助。

关于SQLite:分析的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557151/

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