Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 12044|Risposta: 0

[Comunicazione] Problema di utilizzo dell'indice quando SQLSERVER gestisce come '%keyword%'

[Copiato link]
Pubblicato su 26/11/2014 15:52:19 | | | |

Affermazione 1: Il prefisso jolly % di segno percentuale farà sì che le query SQL interrompano l'indice e utilizzino invece la scansione completa delle tabelle. Questa affermazione è popolare

La conclusione è sbagliata

In realtà, questa affermazione non è molto accurata. Il prefisso jolly % renderà la ricerca SQL per indici estremamente efficiente, ma nella maggior parte dei casi andrà comunque all'indice (non è richiesto un indice integrale, basta costruire un indice normale)

CREA UN INDICE NON CLUSTERIZZATO [Ix_index NOME] SU [dbo]. [wkf_ Nome del tavolo]
(
[db_title]  ASC
)

Esegui in questo momento

SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title] DA [nome della biblioteca]. [dbo]. [wkf_database] dove [db_title]come '%dba%' ordina di 1 desc

Il piano delle query è chiaramente visualizzato

Prima che il confronto venga indicizzato:


Come eccezione, query complesse L'ottimizzatore di query può abbandonare l'indice a favore della scansione completa delle tabelle. Questo non vale solo per LIKE '%keyword%', ma anche per la complessità delle query




Affermazione 2: I prefissi di porcentuale di wild card faranno in modo che le query SQL si indichino invece di nessun indice

Questa affermazione è molto unilaterale, e il 99% dell'indice ridurrà l'IO e migliorerà l'efficienza rispetto al non indicizzare, ma l'azione di abbinamento delle chiavi dopo aver trovato l'indice è anche in parte un consumo. Come mostrato nelle due figure sopra, se le parole chiave sono facilmente abbinabili, la scansione completa della tabella trova rapidamente i dati e la scansione dell'indice non risparmia abbastanza tempo per compensare il tempo impiegato dall'azione di abbinamento delle chiavi (la maggior parte delle query online non ha questo problema).
Trattamento:
1. Se non ti interessa, il consumo extra di prestazioni non è molto elevato. E le diverse parole chiave hanno un consumo differente, ma alcune hanno questo problema e possono essere ignorate
2. Un modo migliore è costruire un indice di override (noto anche come indice INCLUDE) se le condizioni lo permettono. Premessa: a. Lo spazio di archiviazione è sufficiente, b non influisce significativamente sulle operazioni DML e c non ha campi grandi nell'indice sovrascritto

CREA UN INDICE NON CLUSTERIZZATO [Ix_index NOME] SU [dbo]. [wkf_ Nome del tavolo]
(
[db_title]  ASC
)
INCLUDE ( [db_id], db_Summary],[db_AddDate])

Al momento, il piano di esecuzione delle query è il seguente, molto più rinfrescante


Quanto sopra è ciò che mi viene in mente ora per l'elaborazione SQLSERVER, SELEZIONA * DA NOME TABELLA COME '%Keyword %'






Precedente:La replicazione delle transazioni SQLserver aggiunge nuove tabelle senza riinizializzazione
Prossimo:Enunciato SQL pratico: stima della data
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com