Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 12044|Vastaus: 0

[Viestintä] Indeksin käyttöongelma, kun sqlserver käsittelee esimerkiksi '%keyword%'

[Kopioi linkki]
Julkaistu 26.11.2014 15.52.19 | | | |

Väite 1: Prosenttimerkki % villikorttietuliite saa SQL-kyselyt pysäyttämään indeksin ja käyttämään sen sijaan täyttä taulukon skannatusta. Tämä väite on suosittu

Johtopäätös on väärä

Itse asiassa tämä väite ei ole kovin tarkka. Jokerikortti-% -etuliite tekee SQL-indeksin hausta erittäin tehokkaaksi, mutta useimmissa tapauksissa se menee silti indeksiin (kokotekstiindeksiä ei tarvita, rakennetaan vain normaali indeksi).

LUO EI-KLUSTEROITU INDEKSI [Ix_index NAME] [dbo]:SSA. [wkf_ Pöydän nimi]
(
[db_title]  ASC
)

Suorita tässä vaiheessa

VALITSE top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FROM [kirjaston nimi]. [dbo]. [wkf_database] missä [db_title]kuten '%dba%' järjestys yhdellä desc

Kyselysuunnitelma näkyy selvästi

Ennen kuin vertailu indeksoidaan:


Poikkeuksena monimutkaiset kyselyt Kyselyoptimaattori voi hylätä indeksin ja siirtyä täydelliseen taulukkoskannaukseen. Tämä ei koske vain LIKE '%keyword%' -tyyppistä, vaan myös kyselyn monimutkaisuutta




Väite 2: Prosentuaalinen % villikorttietuliitteet tekevät SQL-kyselyistä indeksin sen sijaan, että ei lainkaan indeksiä

Tämä väite on hyvin yksipuolinen, ja 99 % indeksistä vähentää IO:ta ja parantaa tehokkuutta verrattuna indeksoimatta jättämiseen, mutta keskeinen vastaavuustoimi indeksin löytämisen jälkeen on myös osittain suorituskykyä kuluttava. Kuten yllä olevissa kahdessa kuvassa näkyy, jos avainsanat on helppo yhdistää, koko taulukon skannaus löytää tiedot nopeasti, eikä indeksiskannaus säästä tarpeeksi aikaa korvatakseen avainten yhdistämisen kulumaa aikaa (useimmissa verkkokyselyissä tätä ongelmaa ei ole).
Hoito:
1. Jos et välitä siitä, ylimääräinen suorituskyvyn kulutus ei ole kovin suuri. Ja eri avainsanoilla on erilainen kulutus, mutta joillakin avainsanoilla on tämä ongelma ja ne voi jättää huomiotta
2. Parempi tapa on rakentaa ohitusindeksi (tunnetaan myös nimellä INCLUDE-indeksi), jos olosuhteet sen sallivat. Lähtökohta: a. Tallennustila on riittävä, b ei merkittävästi vaikuta DML-operaatioihin, eikä c:llä ole suuria kenttiä ylikirjoitetussa indeksissä

LUO EI-KLUSTEROITU INDEKSI [Ix_index NAME] [dbo]:SSA. [wkf_ Pöydän nimi]
(
[db_title]  ASC
)
INCLUDE ( [db_id],[db_Summary],[db_AddDate])

Tällä hetkellä suorituskyselysuunnitelma on seuraava, mikä on paljon virkistävämpää


Yllä oleva on se, mitä keksin nyt SQLSERVER-prosessoinnista VALITSE * TAULUNIMESTÄ KUTEN '%Keyword %'






Edellinen:SQL Serverin transaktioiden replikointi lisää uusia tauluja ilman uudelleenkäynnistystä
Seuraava:Käytännön SQL-lause: päivämäärän estimointi
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com