Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 12044|Svar: 0

[Kommunikation] Problem med indexanvändning när sqlserver hanterar som '%keyword%'

[Kopiera länk]
Publicerad på 2014-11-26 15:52:19 | | | |

Uttalande 1: Prefixet % förtecken % jokerkort kommer att få SQL-frågor att stoppa indexet och istället använda full tabellskanning. Detta påstående är populärt

Slutsatsen är fel

Faktum är att detta uttalande inte är särskilt exakt. Jokerprefixet % gör SQL-sökningar efter index extremt effektiva, men i de flesta fall går det ändå till indexet (inget fulltextindex krävs, bara bygg ett vanligt index)

SKAPA ICKE-KLUSTRAT INDEX [Ix_index namn] PÅ [dbo]. [wkf_ Bordsnamn]
(
[db_title]  ASC
)

Avrätta vid denna tidpunkt

VÄLJ TOPP 10 [db_id],[db_Summary],[db_AddDate],[db_title] FRÅN [bibliotekets namn]. [dbo]. [wkf_database] där [db_title]som '%dba%' ordning efter 1 beskrivning

Frågeplanen visas tydligt

Innan jämförelsen indexeras:


Som ett undantag, komplexa frågor Frågeoptimeraren kan överge indexet till förmån för fullständig tabellskanning. Detta gäller inte bara för SOM '%nyckelord%', utan också relaterat till frågekomplexitet




Påstående 2: Procentandel av jokerprefix gör att SQL-frågor indexeras istället för att inte indexeras

Detta påstående är mycket ensidigt, och 99 % av indexet kommer att minska IO och förbättra effektiviteten jämfört med att inte indexera, men nyckelmatchningsåtgärden efter att indexet hittats är också delvis prestationskrävande. Som visas i de två figurerna ovan, om nyckelorden enkelt matchas, hittar hela tabellskanningen snabbt datan, och indexskanningen sparar inte tillräckligt med tid för att kompensera för den tid som krävs för nyckelmatchningsåtgärden (de flesta online-sökningar har inte detta problem).
Behandling:
1. Om du inte bryr dig om det är den extra prestandaförbrukningen inte särskilt stor. Och olika nyckelord har olika konsumtion, men vissa nyckelord har detta problem och kan ignoreras
2. Ett bättre sätt är att bygga ett överstyrningsindex (även kallat INCLUDE-index) om förhållandena tillåter det. Premiss: a. Lagringsutrymmet är tillräckligt, b påverkar inte DML-operationerna nämnvärt, och c har inga stora fält i det överskrivna indexet

SKAPA ICKE-KLUSTRAT INDEX [Ix_index namn] PÅ [dbo]. [wkf_ Bordsnamn]
(
[db_title]  ASC
)
INKLUDERA ( [db_id],[db_Summary],[db_AddDate])

Just nu är exekveringsfrågeplanen följande, vilket är mycket mer uppfriskande


Ovanstående är vad jag kan komma på nu för SQLSERVER som bearbetar SELECT * FROM TABLENAME SOM '%Keyword %'






Föregående:SQLserver-transaktionsreplikering lägger till nya tabeller utan ominitialisering
Nästa:Praktisk SQL-sats: datumuppskattning
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com