gpt4 book ai didi

sql - 使用 like 和 where 模式对列进行索引?

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

我得出这样的结论,就像在下面的情况下确实会寻找/扫描但我没有得到为什么它在第一种情况下扫描并在第二种情况下查找。我了解了第三种情况。

SELECT c.contactname FROM Sales.Customers c
WHERE c.contactname LIKE '%a'-- Does a Scan 1st Case

SELECT c.contactname FROM Sales.Customers c
WHERE c.contactname LIKE 'a%'-- Does a Seek 2nd Case

SELECT c.contactname FROM Sales.Customers c
WHERE c.contactname LIKE '%a%'-- Does a Scan

如果我在联系人姓名上建立一个索引,其中包含以下示例数据,那么会如何索引树..像我们一样,如果构建数字,它将比较小于大于和将遍历以下情况下索引树的遍历方式。

c.contactname

mark
anna
krishna
nadejda
allen
bob
cab

最佳答案

这确实是 SQL Server 的工作方式。你问的是为什么。

考虑一下索引。从功能上讲,您可以将其视为按字母顺序存储 contactname - 很像字典或电话簿。 (是的,它通常是更复杂的数据结构,通常是 B 树,但结果是按顺序排列的项目)。

当您说contactname like 'a%'时,查询优化器知道它只需要查看以字母“a”开头的条目。索引确切地知道它们在哪里,因此优化器可以使用查找来获取它们。 SQL Server 实现了这种优化like(并非所有数据库都这样做)。

当您说 contactname like '%a' 时,您是在说“查找以 'a' 结尾的条目”。这很像通过字典查找所有以“a”结尾的单词。排序没有任何帮助。可能存在以“a”开头并以“a”结尾的条目。可能存在以“z”开头并以“a”结尾的条目。因此,这些类型的表达式需要扫描而不是查找。

关于sql - 使用 like 和 where 模式对列进行索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084458/

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