2013-09-24 64 views
1

这是我的查询需要大约1.5秒。我可以降低这个吗?加快此查询

SELECT * 
FROM 
    (SELECT 
     ROW_NUMBER() OVER (ORDER BY NAME asc) peta_rn, 
     peta_query.* 
    FROM 
     (SELECT 
       BOOK, PAGETRIMMED, NAME, TYPE, PDF 
     FROM 
       CCWiseDocumentNames2 cdn 
     INNER JOIN 
       CCWiseInstr2 cwi ON cwi.ID = cdn.ID) as peta_query) peta_paged 
WHERE 
    peta_rn > 1331900 AND peta_rn <= 1331950 

这是我的表结构:

CREATE TABLE [dbo].[CCWiseDocumentNames2](
    [ID] [int] NULL, 
    [BK_PG] [varchar](50) NULL, 
    [NAME] [varchar](100) NULL, 
    [OTHERNAM] [varchar](100) NULL, 
    [TYPE] [varchar](50) NULL, 
    [INDEXNAME] [varchar](50) NULL 
) ON [PRIMARY] 

CREATE TABLE [dbo].[CCWiseInstr2](
    [ID] [int] NULL, 
    [BK_PG] [varchar](50) NULL, 
    [DATE] [datetime] NULL, 
    [ITYPE] [varchar](50) NULL, 
    [BOOK] [int] NULL, 
    [PAGE] [varchar](50) NULL, 
    [NOBP] [varchar](50) NULL, 
    [DESC] [varchar](240) NULL, 
    [TIF] [varchar](50) NULL, 
    [INDEXNAME] [varchar](50) NULL, 
    [CONFIRM] [varchar](50) NULL, 
    [PDF] [varchar](50) NULL, 
    [PAGETRIMMED] [varchar](10) NULL, 
    [PageINT] [int] NULL, 
    [PageCHAR] [varchar](2) NULL, 
    [IdAuto] [int] NOT NULL 
) ON [PRIMARY] 

这是我的执行计划:

enter image description here

正如你可以看到它是97%聚集索引查找和3%指数扫描。任何方式来进一步改善这个查询?

+0

指数好权求?它是您想要避免的扫描。 –

+0

但扫描仅为3%。你的意思是没有办法进一步改进这个查询? –

+0

它似乎你有索引,你有索引的列是什么? –

回答

4

你不能在飞行中添加ROWNUMBER超过一百万行,并期望在where子句将立即认识到与新生成的rownumbers那些行。

0

因为我没有数据的量,只能为您提供一些值得考虑的选项:

奉献的名称列(除ID之外)聚集索引 使您得到ROW_NUMBER过名后加入。 包括从CCWiseInstr2三列插入ID列中的非聚集的索引。这可以节省一些硬盘主轴的运动。性能增益只能在大量数据中观察到。

CREATE NONCLUSTERED INDEX [idx2_ID_include] ON [dbo].[CCWiseInstr2] ([ID] ASC) INCLUDE ([BOOK], [PDF], [PAGETRIMMED]) 
GO 

With a as (
    Select * 
    from ( SELECT ROW_NUMBER() OVER (ORDER BY NAME asc) as peta_rn, ID, 
        type 
      from CCWiseDocumentNames2) as Temp 
      where peta_rn > 1331900 AND peta_rn <= 1331950 
) 
select a.peta_rn, 
     a.type, 
     b.book, 
     b.PAGETRIMMED, 
     b.PDF 
from a 
join CCWiseInstr2 as b on a.id = b.id