gpt4 book ai didi

sql - 在Oracle中,如果我对2列创建复合索引,那么在什么情况下会使用该索引来搜索记录?

转载 作者:行者123 更新时间:2023-12-03 09:22:50 26 4
gpt4 key购买 nike

在Oracle中,如果我对2列创建复合索引,那么在什么情况下会使用该索引来搜索记录?

a) 如果我的查询有一个涉及第一列的 WHERE 子句例如WHEREfirst_column = '约翰'

b) 如果我的查询有一个涉及第二列的 WHERE 子句例如WHERE secondary_column = '夏尔马'

c) a 或 b

d) a 和 b

e) 不是特别是这两列,而是可以是 WHERE 子句中的任何列。

f) 仅 a 列或 a 和 b 两列

最佳答案

我碰巧认为 MySQL 在描述如何使用复合索引方面做得非常好。文档是here .

基本思想是索引通常在以下情况下使用:

  • where条件是 col1 上的相等(col1 = value)。
  • where条件是不等式或 incol1 ( col1 in (list) , col1 < value )
  • where条件是 col1 上的相等和col2 ,通过 and 连接(col1 = val1 and col2 = val2)
  • where条件是 col1 上的相等和一个不等式或 incol2 .
  • 上述四种情况中的任何一种,其中附加列与其他列上的附加条件一起使用,并通过 and 连接.

此外,如果col1,通常会使用索引和col2是查询中唯一引用的列。这称为覆盖索引,并且——假设表中还有其他列——读取索引比原始表更快,因为索引较小。

Oracle 有一个非常智能的优化器,因此它也可能在某些相关情况下使用索引,例如当 col1 时使用in条件以及 col2 上的条件.

一般来说,如果列是函数的参数,则条件不符合索引的条件。因此,这些子句不会使用基本索引:

where month(col1) = 3
where trunc(col1) = trunc(sysdate)
where abs(col1) < 1

Oracle 支持功能索引,因此如果这些结构确实很重要,您可以在 month(col1) 上创建索引, trunc(col1) ,或abs(col1) .

此外,or往往会降低使用索引的可能性。

关于sql - 在Oracle中,如果我对2列创建复合索引,那么在什么情况下会使用该索引来搜索记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28136561/

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