本周我参加了一次SQL评估测试。具体而言,这个问题是我不理解的问题,因为我还不熟悉聚簇的非聚集索引。
下面的SQL服务器表用于管理公司的产品购买。该表包含1700万行。以下哪些SQL语句可用于创建索引,以计算给定数据的总购买量,将运行最短的时间?
CREATE TABLE [Production].[TransactionHistory]
(
[TransactionID][int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[ProductionID][int] NOT NULL,
[TransactionType][nchar](1) NOT NULL,
[Quantity][int] NOT NULL,
[ActualCost][money] NOT NULL,
[ProductionDate][dateTime] NOT NULL,
)
以下哪些查询可以在最短的处理时间内返回数据?这将使我很好地理解索引如何工作。此问题中可以有最多3个有效答案。在此先感谢,我感谢您的帮助。
选项1
CREATE COVERING INDEX IX_TranHistory_Covered
ON [Production].[TransactionHistory]
(
[ProductionDate] ASC,
[ActualCost] ASC,
[Quantity] ASC
);
选项2
CREATE NONCLUSTERED INDEX IX_TranHistory_Covered
ON [Production].[TransactionHistory]
(
[ActualCost] ASC,
[ProductionDate] ASC,
[Quantity] ASC
);
选项3
CREATE NONCLUSTERED INDEX IX_TranHistory_Covered
ON [Production].[TransactionHistory]
(
[Quantity]
)
INCLUDE
(
[ProductionDate],
[ActualCost]
);
选项4
CREATE NONCLUSTERED INDEX IX_TranHistory_Covered
ON [Production].[TransactionHistory]
(
[ProductionDate]
)
INCLUDE
(
[ActualCost] ASC,
[Quantity] ASC
);
最后一个选项
CREATE INDEX IX_TranHistory_Covered
ON [Production].[TransactionHistory]
(
[ActualCost] ASC,
[Quantity] ASC,
[ProductionDate] ASC
);
答案 0 :(得分:2)
你想要选项4.密钥(生产日期)将引发索引搜索,并且通过创建覆盖索引,满足查询所需的信息就在索引树中,SQL Server不必将整行检索到计算结果。你不想要' asc'在索引的包含部分。