I have a large procedure that performs lots of updates and selects on a table with about 50 million records in and the query plan shows that there are missing indexes that would help:
Missing Index (Impact 89.4367): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLA]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.7279): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLB]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.4069): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter][COLC]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.6373): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLD]) INCLUDE ([UserId],[Price])
Missing Index (Impact 88.774): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLE]) INCLUDE ([UserId],[Price])
Missing Index (Impact 89.9133): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLF]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.1297): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLF]) INCLUDE ([UserId],[Price])
Missing Index (Impact 76.6554): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLG]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.9105): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLH]) INCLUDE ([UserId],[Price])
Missing Index (Impact 84.1814): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLI]) INCLUDE ([UserId],[Price])
Missing Index (Impact 89.3511): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLJ]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.3087): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLK]) INCLUDE ([UserId],[Price])
Missing Index (Impact 90.6367): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLL]) INCLUDE ([UserId],[Price])
Missing Index (Impact 75.6598): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLM]) INCLUDE ([UserId],[Price])
Missing Index (Impact 82.8915): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLN]) INCLUDE ([UserId],[Price])
Missing Index (Impact 88.2316): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLO]) INCLUDE ([UserId],[Price])
Missing Index (Impact 81.9138): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLP]) INCLUDE ([UserId],[Price])
Missing Index (Impact 80.1902): CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[myTable] ([Category],[Quarter],[COLP]) INCLUDE ([UserId],[Price])
My question is should I:
Create all of the indexes it suggests
Create a covering index with all of the columns e.g.
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 an index with all of the columns in the includes e.g
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])
- Some other combination?
I understand there may not be an exact answer to this but which would you recommend and why?