sql – 搜索时CONVERT()对INDEX有什么影响?
发布时间:2020-12-12 06:29:09 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用SQL Server 2008.我在DateTime列“DateFrom”上有一个非唯一的非聚集索引.我正在根据这个专栏搜索表格.我只是想知道CONVERT()函数对INDEX的影响,见下文: Query1:SELECT *FROM myTableWHERE CONVERT(VARCHAR(10),DateFrom,23) = '2011-01-01'Query2
我正在使用SQL Server 2008.我在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列是日期时间列.然而,您正在将列转换为字符串并进行字符串比较.因此,服务器不会使用您的日期时间索引. 在第二个示例中,您将直接比较常量值和日期列,因此服务器可以使用索引.服务器会将比较右侧的字符串常量转换为日期时间值.但是,它不会在所有情况下使用索引.例如,如果您的行数非常少,则服务器可能决定不使用索引,只扫描几行. 两个查询都可能产生相同的结果集,但它们仍然非常不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |