gpt4 book ai didi

sql - 如果 WHERE 子句包含未索引的列,是否使用索引

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

我正在使用具有以下索引的表:

ind1 : column A,B,C,D
ind2 : column G
ind3 : column C
ind4 : column F
ind5 : column D
ind6 : column E

在我的查询中,我使用了以下选择标准:

SELECT * FROM table WHERE
A=a
AND B=b
AND C=c
AND D=d
AND E=e
AND F=f
AND H=h (H does not have an index)

我的问题是是否使用表的索引,如果在这个查询中提高性能,请注意该表总共包含12列和32M条记录。

最佳答案

是的,查询几乎肯定会使用其中一个索引来预选哪些行可能至少满足某些条件。要检查未索引列(如列 H)的 WHERE 子句是否为真,Oracle 只需检查表本身。由于索引指向表的正确物理位置,因此这通常非常快。

使用哪个索引,取决于很多因素,如表的大小、索引的大小、表列的唯一性、索引的唯一性、列值的数据分布等。

要查看您的查询中使用了哪些索引,请查看执行计划,例如您可以在 SQL Developer 中通过按 F10 来查看。

编辑:根据我的经验,Oracle 选择最有希望的索引(这将最大程度地减少行数),然后通过这样的表查找检查 WHERE 子句中的所有列。

还请确保表的统计数据是最新的。如有疑问,请与

SELECT table_name, last_analyzed FROM USER_TABLES;

如果 last_analyzed 为空或旧日期,请搜索 DBMS_STATS.GATHER_TABLE_STATS 以刷新统计数据。

关于sql - 如果 WHERE 子句包含未索引的列,是否使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50716770/

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