gpt4 book ai didi

sql - 搜索时CONVERT()对INDEX有什么影响?

转载 作者:行者123 更新时间:2023-12-03 21:39:31 25 4
gpt4 key购买 nike

我正在使用SQL Server2008。DateTime列“DateFrom”上有一个非唯一的非聚集索引。我正在根据此列搜索表。我只是想知道 CONVERT()函数对INDEX的影响,请参见以下内容:

Query1:
SELECT *
FROM myTable
WHERE CONVERT(VARCHAR(10),DateFrom,23) >= '2011-01-01'

Query2:
SELECT *
FROM myTable
WHERE DateFrom >= '2011-01-01 00:00:00.000'

我已经检查并发现没有区别。但是我在想,由于该列是CONVERTED的,所以SQL Server可能不使用该索引,这是否正确?

,如果这不是适当的问题,请原谅我。

最佳答案

通常,当您在WHERE子句中比较的左侧具有函数时,服务器将无法利用引用列上的索引。

在第一个示例中,没有直接与DateFrom列进行比较。相反,您在列上使用了一个函数。当服务器扩展它时,它必须对每个列值执行该功能,并且不对结果值建立索引。因此,不能使用索引来改善查询。

同样,在第一个示例中,您指出DateFrom列是datetime列。但是,您正在将列转换为字符串并进行字符串比较。因此,服务器将不会使用您的日期时间索引。

在第二个示例中,您将直接将常量值与date列进行比较,因此服务器可以利用索引。服务器会将比较右侧的字符串常量转换为datetime值。但是,它不会在所有情况下都使用索引。例如,如果您的行数很少,则服务器可能会决定不使用索引,而仅扫描几行。

这两个查询可能会产生相同的结果集,但是它们仍然有很大的不同。

关于sql - 搜索时CONVERT()对INDEX有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122821/

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