gpt4 book ai didi

sql - SQL 速度的惊人提升

转载 作者:行者123 更新时间:2023-12-02 02:44:08 26 4
gpt4 key购买 nike

我刚刚发现以下两个 select 语句之间的执行计划性能有很大不同:

select * from your_large_table
where LEFT(some_string_field, 4) = '2505'

select * from your_large_table
where some_string_field like '2505%'

执行计划分别为 98% 和 2%。那么速度上就有点差别了。我当时看到的时候真的很震惊。

我总是这样做 LEFT(xxx) = 'yyy' 因为它读起来很好。实际上,我通过对照我手工编写的 SQL 检查 LINQ 生成的 SQL 发现了这一点。我认为 LIKE 命令会更慢,但实际上要快得多。

我的问题是为什么 LEFT() 比 LIKE '%..' 慢。它们到底是相同的吗?

另外,使用 LEFT() 是否会影响 CPU?

最佳答案

更一般地说,永远不要在查询中 WHERE 子句的左侧使用函数。如果这样做,SQL 将不会使用索引——它必须评估表中每一行的函数。目标是确保您的 where 子句是“Sargable

其他一些例子:

Bad: Select ... WHERE isNull(FullName,'') = 'Ed Jones'
Fixed: Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))

Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'

Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())

Bad: Select ... WHERE Year(OrderDate) = 2003
Fixed: Select ... WHERE OrderDate >= '2003-1-1' AND OrderDate < '2004-1-1'

关于sql - SQL 速度的惊人提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380628/

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