首页 > 解决方案 > 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

标签: sqlsql-serverentity-frameworkentity-framework-6

解决方案


为了提高index在您的订单表上创建的性能。获得前 10 名,然后对内部查询结果进行排序将需要时间,因为如果它不是强制的或最佳选项,则通过删除 order by 或前 10 名将时间加倍,使用 Orders(orderid) 上的索引通过快速索引搜索选择执行排序.


推荐阅读