« e-Tax専用ソフトをインストールしました。 | トップページ | あけましておめでとうございます。 »

2008年12月28日 (日)

SQLServerのインデックスについて調べてみました。

恐らく、以下に挙げる内容は「至極当然」の話だと思いますが、
調べてみたので残しておきます。

まずは、クラスタ化インデックスをSectionNoに張り、Noに非クラスタ化一意インデックスを張ったテーブル


USE [DB_TEST]
GO
CREATE TABLE [dbo].[Clustered_Table](
[No] [int] NOT NULL,
[SectionNo] [int] NOT NULL,
[Name] [nvarchar](50) COLLATE Japanese_CI_AS NOT NULL,
[updDate] [datetime] NOT NULL
) ON [PRIMARY]
USE [DB_TEST]
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_Primary_Table] ON [dbo].[Clustered_Table]
(
[No] ASC
)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

USE [DB_TEST]
GO
CREATE CLUSTERED INDEX [IX_Clustered_Table] ON [dbo].[Clustered_Table]
(
[SectionNo] ASC
)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

次にNo列にプライマリキーをつけたもの

USE [DB_TEST]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[NonClustered_Table](
[No] [int] NOT NULL,
[SectionNo] [int] NOT NULL,
[Name] [nvarchar](50) COLLATE Japanese_CI_AS NOT NULL,
[updDate] [datetime] NOT NULL,
CONSTRAINT [PK_NonClustered_Table] PRIMARY KEY CLUSTERED
(
[No] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

この2つのテーブルに10000件のデータをそれぞれ入れて、
SELECT * FROM dbo.Clusterd_Table WHERE SectionNo = 500
SELECT * FROM dbo.NonClusterd_Table WHERE SectionNo = 500

なんていうSQLを実行させて、それぞれ実行プランを取得しました。
すると、コストに以下の差がでました。

非クラスタ化
I/Oコスト:0.0586806
CPUコスト:0.011157
操作コスト:0.0698376

クラスタ化
I/Oコスト:0.003125
CPUコスト:0.000168
操作コスト:0.003293

クラスタで分割された範囲を検索させると劇的な速さが実現されるようです。

ただ、プライマリキーでの検索ではさすがに非クラスタ化の方が早いように思います。
(実際にはそんなに数値的な差は無かったですが、
クラスタ化テーブルの方は、一意インデックスとクラスタ化インデックスの両方を検索していました)

まあ、範囲検索が多いか、キーでの検索が多いかの違いでしょうか。
テーブル設計をしっかりしましょうということで。

(クラスタ分割した時ってインデックスの再構築が必要になるような…?)

|

« e-Tax専用ソフトをインストールしました。 | トップページ | あけましておめでとうございます。 »

DataBase」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/50625/43559528

この記事へのトラックバック一覧です: SQLServerのインデックスについて調べてみました。:

« e-Tax専用ソフトをインストールしました。 | トップページ | あけましておめでとうございます。 »