Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 12044|Atbildi: 0

[Paziņojums] Indeksa izmantošanas problēma, kad sqlserver apstrādā tādus kā '%keyword%'

[Kopēt saiti]
Publicēts 26.11.2014 15:52:19 | | | |

1. paziņojums: procentu zīmes % aizstājējzīmju prefikss liks SQL vaicājumiem apturēt indeksu un tā vietā izmantot pilnu tabulas skenēšanu. Šis apgalvojums ir populārs

Secinājums ir nepareizs

Faktiski šis apgalvojums nav ļoti precīzs Aizstājējzīmes % prefikss padarīs SQL indeksu meklēšanu ārkārtīgi efektīvu, bet vairumā gadījumu tas joprojām nonāks indeksā (nav nepieciešams pilna teksta indekss, vienkārši izveidojiet normālu indeksu)

IZVEIDOT NEGRUPĒTU INDEKSU [Ix_index NOSAUKUMS] VIETNĒ [dbo]. [wkf_ tabulas nosaukums]
(
[db_title]  ASC
)

Izpildīt šobrīd

SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FROM [bibliotēkas nosaukums]. [DBO]. [wkf_database] kur [db_title]like '%dba%' sakārtot pēc 1 desc

Vaicājuma plāns ir skaidri parādīts

Pirms salīdzinājuma indeksēšanas:


Izņēmuma kārtā sarežģīti vaicājumi Vaicājumu optimizētājs var atteikties no indeksa par labu pilnas tabulas skenēšanai. Tas attiecas ne tikai uz LIKE '%keyword%', bet arī uz vaicājuma sarežģītību




2. apgalvojums: procentuālais % aizstājējzīmju prefiksi padarīs SQL vaicājumus indeksu, nevis bez indeksa

Šis apgalvojums ir ļoti vienpusējs, un 99% indeksa samazinās IO un uzlabos efektivitāti salīdzinājumā ar indeksēšanu, bet galvenā atbilstības darbība pēc indeksa atrašanas arī daļēji patērē veiktspēju. Kā parādīts divos iepriekš minētajos attēlos, ja atslēgvārdi ir viegli saskaņojami, pilna tabulas skenēšana ātri atrod datus, un indeksa skenēšana neietaupa pietiekami daudz laika, lai kompensētu laiku, ko patērē atslēgas atbilstības darbība (lielākajai daļai tiešsaistes vaicājumu šīs problēmas nav).
Ārstēšana:
1. Ja jums tas nerūp, papildu veiktspējas patēriņš nav ļoti liels. Dažādiem atslēgvārdiem ir atšķirīgs patēriņš, taču dažiem atslēgvārdiem ir šī problēma, un tos var ignorēt
2. Labāks veids ir izveidot ignorēšanas indeksu (pazīstams arī kā INCLUDE indekss), ja apstākļi to atļauj. Priekšnoteikums: a. Krātuves vieta ir pietiekama, b būtiski neietekmē DML operācijas, un c pārrakstītajā indeksā nav lielu lauku

IZVEIDOT NEGRUPĒTU INDEKSU [Ix_index NOSAUKUMS] VIETNĒ [dbo]. [wkf_ tabulas nosaukums]
(
[db_title]  ASC
)
INCLUDE ( [db_id],[db_Summary],[db_AddDate])

Šobrīd izpildes vaicājuma plāns ir šāds, kas ir daudz atsvaidzinošāks


Iepriekš minētais ir tas, ko es tagad varu iedomāties SQLSERVER apstrādei SELECT * FROM TABLENAME, PIEMĒRAM, '%Keyword %'






Iepriekšējo:SQL Server transakciju replicēšana pievieno jaunas tabulas bez atkārtotas inicializācijas
Nākamo:Praktisks SQL paziņojums: datuma novērtējums
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com