2009-09-08 8 views
43

So che un indice cercano è meglio di un indice scansione, ma che è preferibile in SQL Server spiegare piani: Indice sollecitare o chiave di ricerca (segnalibro in SQL Server 2000)?Che è meglio: segnalibro/ricerca della chiave o Index Scan

Ti prego, dimmi che non ha cambiato nuovamente il nome per SQL Server 2008 ...

+1

il contenuto della domanda pone una cosa e il titolo una cosa diversa .... – Peter

risposta

47

Indice cercano, ogni volta.

Le ricerche sono costose, quindi questo copre gli indici e in particolare è stata aggiunta la clausola INCLUDE per migliorarli.

Dicendo che se si prevede esattamente una riga, ad esempio, una ricerca seguita a una ricerca può essere migliore di cercare di coprire una query. Ci affidiamo a questo per evitare ancora un altro indice in determinate situazioni.

Edit: semplice colloquio articolo: Using Covering Indexes to Improve Query Performance

Modifica, agosto 2012

Ricerche accada per riga è per questo che scalano male. Alla fine, l'ottimizzatore sceglierà una scansione dell'indice cluster invece di una ricerca + ricerca perché è più efficiente di molte ricerche.

+1

+1 per gli indici di copertura e il collegamento Simple-Talk (roba eccellente) –

2

This SO question indica che le ricerche chiave sono qualcosa da evitare. Un indice di ricerca sarà sicuramente l'operazione migliore.

8

Key lookup è molto simile a un indice di ricerca cluster (pre 2005 SP2 è stato denominato 'cerca con lookup'). Penso che l'unica differenza sia che la ricerca chiave può specificare un ulteriore argomento PRE-FETCH che istruisce il motore di esecuzione per prefetch su più chiavi nel cluster (ad esempio, fare una ricerca per indice cluster seguita da scansione).

Vedere una ricerca chiave non dovrebbe spaventarti. L'operatore normale è utilizzato in Nested Loops e Nested Loops è l'operatore di join run-of-the-mill. Se si desidera migliorare un piano, provare a migliorare il join e vedere se è possibile utilizzare un join di tipo merge (ad esempio, entrambi i lati del join possono fornire righe sullo stesso ordine chiave, join più veloce) o un hash-join (avere abbastanza memoria per il QO per considerare un hash join o per ridurre la cardinalità filtrando le righe prima del join piuttosto che dopo).

+1

sei sicuro ... una ricerca chiave è un segnalibro lookup = costoso, no? – gbn

+1

afaik è esattamente costoso quanto una ricerca, si traduce nella stessa operazione fisica. La * presenza * di ricerche però indica * potenziali * problemi come gli indici che coprono lo slonon. Tieni presente che con join una ricerca * potrebbe * migliore di una ricerca, poiché le ricerche possono specificare il pre-recupero. –

+0

'slonon-convering indexes' =>' lenti join o indici non coprenti' (typo) –

Problemi correlati