0

私はデータベースに興味があり、SQL Server 2008 をいじり始めました。テーブルに適切なインデックスを使用すると、データベースの全体的なパフォーマンスが向上するという記事を読みました。

2 つのテーブルがあり、SQL データ ジェネレーターを使用して各テーブルに 100 万行を自動生成しました。テーブル 1 は顧客テーブル、テーブル 2 は賃借人テーブルです。設計は次のとおりです。

Customer                                    Renters
CustomerID (PK)                             RentersID (PK)
ForeName (Non clustered index)              StartDate
SurName                                     EndDate
Email                                       RentalNights
                                            CustomerID (FK) (Non Clustered index)

最も一般的に使用される列と外部キー列に非クラスター化インデックスを配置すると、パフォーマンスが向上することを読みました。インデックスを使用する前と使用した後に単純な結合クエリを作成しましたが、インデックスを使用した場合のパフォーマンスの向上は見られません。以下の画像は、インデックスを使用する前と使用した後の実行計画です。

索引の前: ここに画像の説明を入力

インデックスの後: ここに画像の説明を入力

編集: これは私が使用しているSQL構文です

SELECT cu.ForeName + ' ' + cu.SurName AS 'Name' 
FROM dbo.Customers cu
INNER JOIN dbo.Renters re ON re.CustomerID = cu.CustomerID
WHERE cu.ForeName = 'Daniel'

編集 これは、以下の返信に投稿されたものを使用した私のインデックス構文です。

CREATE NONCLUSTERED INDEX [ix_Customer] ON [dbo].[Customers] ( [ForeName] ASC, [CustomerID] ASC ) INCLUDE ( [SurName]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO

4

1 に答える 1

4

クエリに基づいて、構築するのに最適な非クラスター化インデックスは次のようになります。

CREATE NONCLUSTERED INDEX ix_IndexA on dbo.Customers (Forename, CustomerID) 
     INCLUDE (SurName)

CREATE NONCLUSTERED INDEX ix_IndexB on dbo.Renters (CustomerID)

キー フィールドをフィルターまたはJOIN列に配置し、INCLUDE列をリーフ レベルにしてSELECT.

于 2013-03-28T14:15:24.450 に答える