使用offset-fetch时,选择查询无法完成

时间:2017-11-15 13:09:10

标签: sql sql-server

我使用Linq在Web应用程序中实现了分页,Linq生成的查询看起来与此类似:

SELECT 
    [Extent1].[ID_PLAZO] AS [ID_PLAZO], 
    LTRIM(RTRIM([Extent1].[ID_EXPEDIENTE])) AS [ID_EXPEDIENTE], 
    [Extent1].[ID_TIPO_PLAZO] AS [ID_TIPO_PLAZO], 
    [Extent1].[FECHA_INICIO] AS [FECHA_INICIO], 
    [Extent1].[FECHA_FIN] AS [FECHA_FIN], 
    [Extent1].[FECHA_EJECUCION_INICIO] AS [FECHA_EJECUCION_INICIO], 
    [Extent1].[FECHA_EJECUCION_FIN] AS [FECHA_EJECUCION_FIN]
    FROM   [dbo].[AESEG_PLAZO] AS [Extent1]
    INNER JOIN [dbo].[AESEG_EXPEDIENTE] AS [Extent2] ON [Extent1].[ID_EXPEDIENTE] = [Extent2].[ID_EXPEDIENTE]
    INNER JOIN [dbo].[SAS_CONVOCATORIA] AS [Extent3] ON [Extent2].[ID_CONVOCATORIA] = [Extent3].[CONV_ID_CONVOCATORIA]
    WHERE ([Extent3].[CONV_PREFIJO_EXP] LIKE '%AC15%' ESCAPE '~') OR ([Extent3].[CONV_DESCRIPCION] LIKE '%AC15%' ESCAPE '~')
ORDER BY [Extent1].[ID_PLAZO] ASC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

查询确实有效,并且在不到一秒的时间内返回10个结果,但如果我获取5行,它就不会结束。

我注意到执行计划在这些情况下有点不同,但我不是SQL专家。你知道如何解决这个问题或为什么会这样?

获取10行

fetch 10 rows

获取5行

fetch 5 rows

1 个答案:

答案 0 :(得分:1)

似乎问题出现在 ESCAPE'〜'部分。最后,我使用这种方法生成一个没有它的查询,它工作正常,速度更快。

http://jendaperl.blogspot.com.es/2011/02/like-in-linq-to-entities.html