【发布时间】:2020-11-12 21:14:21
【问题描述】:
我有一个大型程序,它在包含大约 5000 万条记录的表上执行大量更新和选择,查询计划显示缺少索引会有所帮助:
缺失索引(影响 89.4367):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLA]) 包括 ([UserId],[Price]) 缺失索引(影响 90.7279):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLB]) 包括 ([UserId],[Price]) 缺失索引(影响 90.4069):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter][COLC]) 包括 ([UserId],[Price]) 缺失索引(影响 90.6373):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLD]) 包括 ([UserId],[Price]) 缺失索引(影响 88.774):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLE]) 包括 ([UserId],[Price]) 缺失索引(影响 89.9133):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLF]) 包括 ([UserId],[Price]) 缺失索引(影响 90.1297):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLF]) 包括 ([UserId],[Price]) 缺失索引(影响 76.6554):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLG]) 包括 ([UserId],[Price]) 缺失索引(影响 90.9105):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLH]) 包括 ([UserId],[Price]) 缺失索引(Impact 84.1814):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLI]) 包括 ([UserId],[Price]) 缺失索引(影响 89.3511):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLJ]) 包括 ([UserId],[Price]) 缺失索引(影响 90.3087):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLK]) 包括 ([UserId],[Price]) 缺失索引(影响 90.6367):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLL]) 包括 ([UserId],[Price]) 缺失索引(影响 75.6598):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLM]) 包括 ([UserId],[Price]) 缺失索引(影响 82.8915):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLN]) 包括 ([UserId],[Price]) 缺少索引(影响 88.2316):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLO]) 包括 ([UserId],[Price]) 缺失索引(影响 81.9138):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLP]) 包括 ([UserId],[Price]) 缺失索引(Impact 80.1902):CREATE NONCLUSTERED INDEX [
] ON [dbo].[myTable] ([Category],[Quarter],[COLP]) 包括 ([UserId],[Price])
我的问题是我应该:
-
创建它建议的所有索引
-
创建一个包含所有列的覆盖索引,例如
CREATE NONCLUSTERED INDEX indexA
ON [dbo].[myTable] ([Category], [Quarter], [COLA], [COLB], [COLC], [COLD], [COLE], [COLF],
[COLG], [COLH], [COLI], [COLJ], [COLK], [COLL], [COLM], [COLN], [COLO], [COLP])
INCLUDE ([UserId],[Price])
- 使用包含中的所有列创建索引,例如
CREATE NONCLUSTERED INDEX indexB
ON [dbo].[myTable] ([Category], [Quarter])
INCLUDE ([COLA], [COLB], [COLC], [COLD], [COLE], [COLF], [COLG], [COLH], [COLI],
[COLJ], [COLK], [COLL], [COLM], [COLN], [COLO], [COLP], [UserId], [Price])
- 其他组合?
我知道对此可能没有确切的答案,但您会推荐哪个以及为什么?
【问题讨论】:
-
如果没有关于您运行的实际查询的信息,一切都是假设。人们就这个主题写了整本书。
-
我明白,但实际上有大约 250 个插入和相似数量的选择来寻找各种问题,我无法将它们全部包含在这里,所以只需要一个理论上的答案。
标签: sql-server indexing