See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 12044|Vastuse: 0

[Kommunikatsioon] Indeksi kasutusprobleem, kui sqlserver käsitleb näiteks '%keyword%'

[Kopeeri link]
Postitatud 26.11.2014 15:52:19 | | | |

Väide 1: Protsendimärgi protsendi eesliide põhjustab SQL-päringute peatamise indeksi ja selle asemel täieliku tabeli skaneerimise. See väide on populaarne

Järeldus on vale

Tegelikult pole see väide väga täpne. Wildcard % prefiks muudab SQL-i otsingu indeksite leidmiseks väga tõhusaks, kuid enamasti läheb see ikkagi indeksisse (täisteksti indeksit pole vaja, lihtsalt ehitatakse tavaline indeks).

LOO [DBO]-S MITTEKLASTERDATUD INDEKS [Ix_index NIMI]. [wkf_ Laua nimi]
(
[db_title]  ASC
)

Täideviige sel ajal

VALI top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FROM [raamatukogu nimi]. [dbo]. [wkf_database] kus [db_title]näiteks '%dba%' järjekord 1 desc järgi

Päringuplaan on selgelt kuvatud

Enne kui võrdlus indekseeritakse:


Erandina võivad keerulised päringud Päringu optimeerija võib indeksist loobuda ja eelistada täistabeli skaneerimist. See ei kehti ainult LIKE '%keyword%' puhul, vaid on seotud ka päringute keerukusega




Väide 2: Protsendiprotsendilised jokker-prefiksid muudavad SQL-päringud indekseerivaks, mitte indeksita

See väide on väga ühepoolne ning 99% indeksist vähendab IO-d ja parandab efektiivsust võrreldes indekseerimiseta olemisega, kuid võtmetähtsusega sobitustegevus pärast indeksi leidmist on samuti osaliselt jõudlust nõudev. Nagu ülaltoodud kahel joonisel näidatud, kui märksõnad on kergesti sobitatavad, leiab kogu tabeli skaneerimine andmed kiiresti üles ning indeksi skaneerimine ei säästa piisavalt aega, et kompenseerida võtmete sobitamise tegevusele kulunud aega (enamikul veebipäringutel seda probleemi ei ole).
Ravi:
1. Kui see sind ei huvita, pole lisajõudluse tarbimine väga suur. Erinevatel märksõnadel on erinev tarbimine, kuid mõnel märksõnal on see probleem ja neid võib ignoreerida
2. Parem viis on ehitada ülekirjutuse indeks (tuntud ka kui INCLUDE indeks), kui tingimused seda võimaldavad. Eeldus: a. Salvestusruum on piisav, b ei mõjuta DML operatsioone oluliselt ja c ei sisalda üle kirjutatud indeksis suuri välju

LOO [DBO]-S MITTEKLASTERDATUD INDEKS [Ix_index NIMI]. [wkf_ Laua nimi]
(
[db_title]  ASC
)
HÕLMA ( [db_id],[db_Summary],[db_AddDate])

Praegu on täitmispäringu plaan järgmine, mis on palju värskendavam


Eelnev on see, mida ma praegu SQLSERVERI töötlemiseks mõtlen, VALI * TABELINIME järgi nagu '%Keyword %'






Eelmine:SQLserveri tehingute replikatsioon lisab uusi tabeleid ilma taasalustamiseta
Järgmine:Praktiline SQL-lause: kuupäeva hindamine
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com