gpt4 book ai didi

sql - 如果所有列均未使用,我的索引还会使用吗?

转载 作者:行者123 更新时间:2023-12-02 06:08:48 25 4
gpt4 key购买 nike

我在表 T 的 A、B、C、D 列上有一个索引

我有一个查询,该查询从 T 中提取 WHERE 子句中的 A、B、C。

会使用该索引还是需要一个仅包含 A、B、C 的单独索引?

最佳答案

David B 是对的,您应该检查执行计划以验证索引是否正在使用。

Will the index be used or will a separate index be needed that only includes A, B, C?
为了回答问题的最后一部分,我认为这是核心的基础主题(而不是直接的解决方案),“几乎”从来没有理由对索引列的子集进行索引。如果您的索引是 (A, B, C, D),则针对 (A, B, C) 的 WHERE 很可能会产生索引 **seek**,这是理想的情况 - 该索引包含所有信息引擎需要直接转到结果集。我相信这对于数字类型和字符串类型中的相等测试来说都是正确的,尽管它可能会被 LIKE '%'s 破坏。另一方面,如果您的 WHERE 只引用了 D,那么您很可能会得到索引 **扫描**,这意味着 SQL 引擎必须扫描 A、B 和 C 的所有组合,并且然后检查 D 是否满足您的条件,然后决定是否将该行添加到结果集中。在一个特别大的表上,当我发现自己必须对“D”列进行大量查询时,我只为 D 添加了一个额外的索引,并且看到了大约 90% 的性能提升。

编辑:我还建议使用 SQL Management Studio 中的数据库引擎优化顾问。它会告诉您表是否没有为您要运行的查询理想地建立索引。

关于sql - 如果所有列均未使用,我的索引还会使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135530/

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