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]

これは私の実行計画です:

ここに画像の説明を入力

ご覧のとおり、97% のクラスター化インデックス シークと 3% のインデックス スキャンです。このクエリをさらに改善する方法はありますか?

4

2 に答える 2

4

その場で行番号を 100 万行を超える行に追加することはできず、where 句がそれらの行を新しく生成された行番号で即座に認識することを期待できません。

于 2013-09-24T12:22:15.593 に答える
0

私はその量のデータを持っていないので、検討のためにいくつかのオプションしか提供できません:

Name 列 (ID 以外) のクラスター化インデックス専用にする name より row_number を取得した後に結合を行います。CCWiseInstr2 からの 3 つの列を 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
于 2013-09-24T13:17:11.197 に答える