Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 12044|Svar: 0

[Kommunikation] Indexudnyttelsesproblem, når sqlserver håndterer som '%keyword%'

[Kopier link]
Opslået på 26/11/2014 15.52.19 | | | |

Udsagn 1: Procenttegn % wildcard-præfikset vil få SQL-forespørgsler til at stoppe indekset og i stedet bruge fuld tabelscanning. Denne udtalelse er populær

Konklusionen er forkert

Faktisk er denne sætning ikke særlig præcis. Joker-præfikset % vil gøre SQL-søgning efter indekser ekstremt effektiv, men i de fleste tilfælde vil det stadig gå til indekset (der kræves ikke et fuldtekstindeks, man opbygger blot et normalt indeks)

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

Udfør på dette tidspunkt

VÆLG top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FRA [bibliotekets navn]. [DBO]. [wkf_database] hvor [db_title]som '%dba%' rækkefølge efter 1 beskrivelse

Forespørgselsplanen vises tydeligt

Før sammenligningen indekseres:


Som undtagelse kan komplekse forespørgsler Forespørgselsoptimeringen opgive indekset til fordel for fuld tabelscanning. Dette gælder ikke kun for SOM '%keyword%', men også relateret til forespørgselskompleksitet




Sætning 2: Procentdel % af wildcard-præfikser vil få SQL-forespørgsler til at indeksere i stedet for ingen indeks

Denne udtalelse er meget ensidig, og 99% af indekset vil reducere IO og forbedre effektiviteten sammenlignet med ikke indeksering, men nøglematchningshandlingen efter indekset er fundet er også delvist præstationskrævende. Som vist i de to figurer ovenfor, hvis nøgleordene let matches, finder den fulde tabelscanning hurtigt dataene, og indeksscanningen sparer ikke nok tid til at kompensere for den tid, der bruges på nøglematchningshandlingen (de fleste online forespørgsler har ikke dette problem).
Behandling:
1. Hvis du ikke bekymrer dig om det, er det ekstra ydelsesforbrug ikke særlig stort. Og forskellige nøgleord har forskelligt forbrug, men nogle nøgleord har dette problem og kan ignoreres
2. En bedre måde er at opbygge et overstyringsindeks (også kendt som et INCLUDE-indeks), hvis forholdene tillader det. Præmis: a. Lagerpladsen er tilstrækkelig, b påvirker ikke DML-operationerne væsentligt, og c har ikke store felter i det overskrevne indeks

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

På nuværende tidspunkt er udførelsesforespørgselsplanen som følger, hvilket er meget mere forfriskende


Ovenstående er, hvad jeg nu kan komme i tanke om for SQLSERVER-behandling VÆLG * FRA TABELNAVN SOM '%Keyword %'






Tidligere:SQLserver-transaktionsreplikering tilføjer nye tabeller uden reinitialisering
Næste:Praktisk SQL-sætning: datoestimering
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com