Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 12044|Svare: 0

[Kommunikasjon] Indeksutnyttelsesproblem når sqlserver håndterer som '%nøkkelord%'

[Kopier lenke]
Publisert på 26.11.2014 15:52:19 | | | |

Utsagn 1: Prosent-tegn % wildcard-prefikset vil få SQL-spørringer til å stoppe indeksen og i stedet bruke full tabellskanning. Denne uttalelsen er populær

Konklusjonen er feil

Faktisk er ikke denne påstanden særlig nøyaktig. Jokerprefikset % vil gjøre SQL-søk etter indekser ekstremt effektivt, men i de fleste tilfeller vil det fortsatt gå til indeksen (ingen fulltekstindeks kreves, bare bygg en vanlig indeks)

OPPRETT IKKE-KLYNGET INDEKS [Ix_index navn] PÅ [dbo]. [wkf_ Bordnavn]
(
[db_title]  ASC
)

Gjennomfør på dette tidspunktet

VELG topp 10 [db_id],[db_Summary],[db_AddDate],[db_title] FRA [biblioteknavn]. [dbo]. [wkf_database] hvor [db_title] som '%dba%' orden etter 1 beskrivelse

Spørringsplanen vises tydelig

Før sammenligningen indekseres:


Som et unntak, komplekse spørringer Spørringsoptimalisatoren kan forlate indeksen til fordel for full tabellskanning. Dette gjelder ikke bare for LIKE '%nøkkelord%', men også relatert til spørringskompleksitet




Utsagn 2: Prosent % wildcard-prefikser vil gjøre SQL-spørringer indeksert i stedet for ingen indeks

Denne påstanden er svært ensidig, og 99 % av indeksen vil redusere IO og forbedre effektiviteten sammenlignet med å ikke indeksere, men nøkkelmatchingshandlingen etter at indeksen er funnet er også delvis ytelseskrevende. Som vist i de to figurene ovenfor, hvis nøkkelordene enkelt kan matches, finner hele tabellskanningen raskt dataene, og indeksskanningen sparer ikke nok tid til å kompensere for tiden som brukes på nøkkelmatchingshandlingen (de fleste nettbaserte spørringer har ikke dette problemet).
Behandling:
1. Hvis du ikke bryr deg om det, er ikke det ekstra ytelsesforbruket særlig stort. Og ulike nøkkelord har ulikt forbruk, men noen nøkkelord har dette problemet og kan ignoreres
2. En bedre måte er å bygge en overstyringsindeks (også kjent som en INCLUDE-indeks) hvis forholdene tillater det. Premiss: a. Lagringsplassen er tilstrekkelig, b påvirker ikke DML-operasjonene vesentlig, og c har ikke store felt i den overskrevne indeksen

OPPRETT IKKE-KLYNGET INDEKS [Ix_index navn] PÅ [dbo]. [wkf_ Bordnavn]
(
[db_title]  ASC
)
INKLUDER ( [db_id],[db_Summary],[db_AddDate])

På dette tidspunktet er utførelsesplanen for spørringen som følger, noe som er mye mer forfriskende


Ovenstående er det jeg kan tenke meg nå for SQLSERVER som behandler VELG * FRA TABELLNAVN SOM '%Keyword %'






Foregående:SQLserver-transaksjonsreplikering legger til nye tabeller uten reinitialisering
Neste:Praktisk SQL-setning: datoestimering
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com