0

我对数据库很感兴趣,并且已经开始使用 SQL Server 2008,我读到在表上使用适当的索引可以帮助提高数据库的整体性能。

我有两个表,使用 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 回答