私はデータベースに興味があり、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