> [!TIP]
> Recept z [kuchárky exekučných plánov](script.php?id=64&s=exekucne-plany-kucharka-zacni-tu). Ukážky bežia v testovacej databáze [PlanLab](script.php?id=65&s=planlab-testovacia-databaza-pre-recepty-exekucnych-planov) – nikdy ich nespúšťaj na produkcii.
## Ako to vyzerá v pláne

Nad grafickým plánom **zelený text „Missing Index (Impact …)“** s príkazom CREATE INDEX. Pravý klik → *Missing Index Details…* otvorí skript. V XML element `MissingIndexes` (môže ich byť viac).
## Čo to znamená
Optimalizátor počas optimalizácie zistil, že by sa mu hodil index, ktorý neexistuje, a odhadol, o koľko by klesol **náklad** tohto dotazu. Je to **nápad**, nie odporúčanie DBA: nevie o ostatných dotazoch, o cene zápisov ani o indexoch, ktoré by stačilo mierne rozšíriť.
### Do hĺbky
- Stĺpce kľúča sú zoradené: najprv **rovnosti** (EQUALITY), potom **nerovnosti** (INEQUALITY), v rámci skupín podľa poradia v tabuľke – nie podľa selektivity. INCLUDE = stĺpce na výstupe.
- Návrh neuvažuje filtrované indexy, columnstore, zoradenie (ORDER BY), ani to, že by stačilo pridať INCLUDE do existujúceho indexu.
- Rovnaké návrhy za celý server od reštartu sú v DMV `sys.dm_db_missing_index_*` – recept [Chýbajúce indexy – návrhy optimalizátora](script.php?id=28&s=chybajuce-indexy-navrhy-optimalizatora) (od 2019 aj `sys.dm_db_missing_index_group_stats_query` s väzbou na dotaz).
- Silnejší signál ako zelený text je často **Eager Index Spool** ([Spools](script.php?id=78&s=spools-table-index-row-count-a-window-spool-eager-vs-lazy)) – optimalizátor si index pri každom behu stavia sám.
- Impact 99 % pri dotaze, ktorý beží raz za mesiac, je menej dôležitý ako 30 % pri dotaze, ktorý beží tisíckrát za minútu.
## Kedy je to v poriadku / kedy problém
| Dobrý kandidát | Pozor |
|---|---|
| častý dotaz, veľký impact, index sa neprekrýva s existujúcim | takmer rovnaký index už existuje (zlúč) |
| tabuľka s málo zápismi | tabuľka s veľa INSERT/UPDATE, už veľa indexov |
| | INCLUDE so všetkými stĺpcami tabuľky (duplicitná kópia tabuľky) |
## Ako si to vyskúšať
```sql
USE PlanLab;
SET STATISTICS IO ON;
-- OrderLines.ProductID nemá index → zelený návrh
SELECT ProductID, SUM(Qty) AS kusy FROM dbo.OrderLines WHERE ProductID = 42 GROUP BY ProductID;
-- vytvor index podľa návrhu (pomenovaný), porovnaj logical reads, potom zmaž
CREATE INDEX IX_Lab_Lines_ProductID ON dbo.OrderLines (ProductID) INCLUDE (Qty);
SELECT ProductID, SUM(Qty) AS kusy FROM dbo.OrderLines WHERE ProductID = 42 GROUP BY ProductID;
DROP INDEX IX_Lab_Lines_ProductID ON dbo.OrderLines;
-- návrhy celého servera od reštartu
SELECT TOP (20) d.statement, d.equality_columns, d.inequality_columns, d.included_columns,
s.user_seeks, s.avg_user_impact
FROM sys.dm_db_missing_index_details AS d
JOIN sys.dm_db_missing_index_groups AS g ON g.index_handle = d.index_handle
JOIN sys.dm_db_missing_index_group_stats AS s ON s.group_handle = g.index_group_handle
ORDER BY s.user_seeks * s.avg_user_impact DESC;
```
Spusti s **Include Actual Execution Plan** (Ctrl+M) – zelený text je nad plánom prvého dotazu. Pravý klik → *Missing Index Details…*.
## Čo s tým
1. Over, či dotaz **stojí za index** (frekvencia, CPU, čítania – [Top 20 dotazov podľa CPU](script.php?id=5&s=top-20-dotazov-podla-cpu)).
2. Porovnaj s **existujúcimi** indexmi ([Používanie indexov](script.php?id=27&s=pouzivanie-indexov-seeks-scans-lookups-updates)) – často stačí rozšíriť existujúci o INCLUDE.
3. Prehodnoť poradie kľúča a INCLUDE (len potrebné stĺpce), pomenuj index podľa konvencie.
4. Over na TEST: plán, logical reads, a že sa nezhoršili zápisy.
## Súvisiace
- [Chýbajúce indexy – návrhy optimalizátora](script.php?id=28&s=chybajuce-indexy-navrhy-optimalizatora)
- [Používanie indexov](script.php?id=27&s=pouzivanie-indexov-seeks-scans-lookups-updates)
- [Spools (Eager Index Spool)](script.php?id=78&s=spools-table-index-row-count-a-window-spool-eager-vs-lazy)
- [Key Lookup a RID Lookup](script.php?id=70&s=key-lookup-a-rid-lookup-dohladanie-chybajucich-stlpcov)
## Zdroje
- [Microsoft Learn – Tune nonclustered indexes with missing index suggestions](https://learn.microsoft.com/sql/relational-databases/indexes/tune-nonclustered-missing-index-suggestions)
- [Brent Ozar – blog a nástroje First Responder Kit](https://www.brentozar.com/)
- [Erik Darling – blog (plány, memory grants, parameter sniffing)](https://erikdarling.com/)
_Texty sú vlastné, tvrdenia overené proti uvedeným zdrojom (11/2026). T-SQL je staticky skontrolovaný, nie spustený na živom serveri – vyskúšaj ho najprv v PlanLab._Chýbajúci index v pláne (zelený text) – prečo ho nebrať naslepo
Zelený návrh Missing Index v exekučnom pláne: ako vzniká, Impact, poradie stĺpcov, čo návrh nevie (iné indexy, zápisy), kde nájsť ďalšie návrhy a ako ich vyhodnotiť pred vytvorením.