sql - SQL:外部查询需要更多时间来获取结果
问题描述
当我运行下面的查询时,它需要一分钟多的时间。但是当我运行内部查询时,它会在一秒钟内执行。Orders 表中有这么多记录 有人可以帮我提高性能吗?
SELECT TOP (10)
[Filter1].[OrderID] AS [OrderID],
[Filter1].[ContactName] AS [ContactName]
FROM (
SELECT [Extent1].[OrderID] AS [OrderID],
[Extent2].[ContactName] AS [ContactName],
row_number() OVER (ORDER BY [Extent1].[OrderID] ASC) AS [row_number]
FROM [dbo].[Orders] AS [Extent1]
LEFT OUTER JOIN [dbo].[Customers] AS [Extent2] ON [Extent1].[CustomerID] = [Extent2].[CustomerID]
WHERE ( CAST(CHARINDEX(LOWER(N'ma'), LOWER([Extent2].[ContactName])) AS int)) > 0
) AS [Filter1]
WHERE [Filter1].[row_number] > 10
ORDER BY [Filter1].[OrderID] ASC
解决方案
为了提高index
在您的订单表上创建的性能。获得前 10 名,然后对内部查询结果进行排序将需要时间,因为如果它不是强制的或最佳选项,则通过删除 order by 或前 10 名将时间加倍,使用 Orders(orderid) 上的索引通过快速索引搜索选择执行排序.
推荐阅读
- ios - 快速解析 ISO8601
- node.js - 如何使用 TypeScript 为 DynamoDB 定义返回类型?
- r - 如何在 R 中组合具有不同长度的日期向量?
- ruby-on-rails - Rails 会话,如何将 SameSite 设置为 Lax
- css - 如何制作特定于桌面的广告,而另一个特定于移动设备的广告?
- python - Tensorflow.keras:输入的形状是 (),即使形状是 (768, 8)
- go - 关于 Golang 在上下文包中嵌入接口字段分配的困惑
- javascript - 如何将随机 JSON 部分添加到 JSON 对象?
- awk - 如何在 bash 中使用 awk 或 sed 将计算出的输出附加到制表符分隔的文本文件的行尾?
- php - Laravel 和 MySQL 时间戳值随 mysqld 配置变化