KB2491510-FIX: päring, mis sisaldab WHERE-klauslis olevat eeltingimust, võtab kaua aega, et koostada SQL Server 2008 või SQL Server 2008 R2

Microsoft jagab Microsoft SQL Server 2008 Service Pack 1 (SP1) või SQL 2008 R2 fikseerib ühe allalaaditavate failidega. Kuna parandused on kumulatiivsed, sisaldab iga uus versioon kõiki Kiirparandusi ja kõiki turvaparandusi, mis kuulusid eelmiste SQL Server 2008 SP1 või SQL 2008 R2 paranduse väljalaskes.

Sümptomid

Arvestage järgmise stsenaariumiga.

  • Microsoft SQL Server 2008 või SQL Server 2008 R2 käitate päringut kindla veeruga tabelis, kus on mitu rida. Päringul on WHERE-klauslis VÄLI sees.

  • VÄLJAL sisaldab sõna, mida kasutate, sisaldab sõna. Word kuvatakse mõnes veerus, mis kaasatakse tabeli täisteksti indeksisse.

Selle stsenaariumi korral kulub päringu koostamiseks pikk aeg. See probleem võib ilmneda näiteks siis, kui käivitate järgmise päringu.

SELECT count(*)FROM dbo.MyLargeTable whereCONTAINS (email_address, '"name@contoso.com"')

Märkused

  • Oletagem, et mõnedes veergudes, mis kaasatakse tabeli täisteksti indeksisse, kuvatakse tekst ". com".

  • Saate jälgida päringu kompileerimise aega, et teha kindlaks, kas see probleem esineb. Üksikasjalikke juhiseid kompileerimise aja jälitamise kohta leiate jaotisest "Lisateave".

Põhjus

See probleem ilmneb, sest täieliku teksti indeksite puhul on põhitegevuse hindamise loogika viga. Sellisel juhul tehakse mitme veeru skannimine, mis sisaldavad sageli esineva sõna, enne kui oodatavate veergude otsingu ulatus on vähenenud.

Lahendus

Kumulatiivse värskenduse teave

SQL Server 2008 hoolduspakett SP2

Selle probleemi lahendus anti esmakordselt välja kumulatiivne Update 4 for SQL Server 2008 hoolduspakett SP2. Selle kumulatiivse värskenduspaketi kohta lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

2527180 Koondvärskenduses pakett 4 SQL Server 2008 Service Pack 2 jaoksMärkus. Kuna järgud on kumulatiivsed, sisaldab iga uus parandus kõiki Kiirparandusi ja kõiki turvaparandusi, mis kuulusid eelmise SQL serveri 2008 Fix väljalaskega. Microsoft soovitab, et te loobuksid kõige uuemate paranduste lubamisest, mis sisaldavad seda käigultparandust. Lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

2402659 Pärast SQL Server 2008 Service Pack 2 väljaandmist väljaantud SQL serveri 2008 järgud Microsoft SQL serveri 2008 käigultparandused luuakse teatud SQL serveri hoolduspakettide jaoks. Peate rakendama SQL Server 2008 hoolduspaketi SP2 käigultparanduse SQL Server 2008 Service Pack 2 installimisel. Vaikimisi sisaldub SQL serveri hoolduspaketis pakutav käigultparandus järgmises SQL serveri hoolduspaketis.Selle probleemi parandus anti esmakordselt välja kumulatiivne Update 13. Lisateavet selle kumulatiivse värskenduspaketi hankimiseks SQL Server 2008 SP1 kohta klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

2497673 Koondvärskenduses pakett 13 SQL Server 2008 hoolduspaketi 1 jaoks Märkus. Kuna järgud on kumulatiivsed, sisaldab iga uus parandus kõiki Kiirparandusi ja kõiki turvaparandusi, mis kuulusid eelmiste SQL Server 2008 SP1 paranduse väljalaskes. Soovitame teil kaaluda kõige uuemate paranduste rakendamist, mis sisaldavad seda käigultparandust. Lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

970365 Pärast SQL Server 2008 hoolduspaketti 1 välja antud SQL serveri 2008 järgud

SQL Server 2008 R2 hoolduspakett 1

Selle probleemi lahendus anti esmakordselt välja kumulatiivne Update 1 for SQL Server 2008 R2 hoolduspakett Service Pack 1. Selle kumulatiivse värskenduspaketi hankimise kohta lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

2544793 SQL Server 2008 R2 hoolduspaketi 1 koondvärskenduses pakett 1Märkus. Kuna järgud on kumulatiivsed, sisaldab iga uus parandus kõiki Kiirparandusi ja kõiki turvaparandusi, mis kuulusid eelmise SQL serveri 2008 R2 paranduse väljalaskes. Soovitame teil kaaluda kõige uuemate paranduste rakendamist, mis sisaldavad seda käigultparandust. Lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

2567616 Pärast SQL Server 2008 R2 hoolduspaketti 1 väljaandmist väljaantud SQL Server 2008 R2 järgud

SQL Server 2008 R2

Selle probleemi parandus anti esmakordselt välja kumulatiivne Update 7. Lisateavet selle kumulatiivse värskenduspaketi SQL Server 2008 R2 hankimise kohta lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

2507770 SQL Server 2008 R2 koondvärskenduses pakett 7 Märkus. Kuna järgud on kumulatiivsed, sisaldab iga uus parandus kõiki Kiirparandusi ja kõiki turvaparandusi, mis kuulusid eelmise SQL serveri 2008 R2 paranduse väljalaskes. Soovitame teil kaaluda kõige uuemate paranduste rakendamist, mis sisaldavad seda käigultparandust. Lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

981356 Pärast SQL Server 2008 R2 väljaandmist väljaantud SQL Server 2008 R2 järgud

Olek

Microsoft on kinnitanud, et see probleem esineb jaotises "kehtib järgmiste toodete kohta" loetletud Microsofti toodetes.

Lahendus

Probleemi lahendamiseks kasutage ühte järgmistest meetoditest.

  • Kasutage * kõigi ühe veeru asemel otsingu veergude lisamiseks. See muudab seda, kui palju ridu tegelikult hinnatakse enne, kui terviklik terviktekst koondab oma põhiprognoosi. Käivitage näiteks järgmine päring.

    SELECT count(*) FROM dbo.MyLargeTabel where CONTAINS (*, '"test@contoso.com"')
  • Tehke sageli esinevad Wordis sõna "Stopp" Wordis, kasutades ALTER täistekstiotsingul STOPLIST lauset. Lisateavet STOPLIST-SQL-i täistekstiotsingul muutmise kohta leiate järgmiselt Microsoft Developer Networki (MSDN-i) veebisaidilt: üldist teavet Alter täistekstiotsingul STOPLIST avaldus Transact-SQL

Lisateave

Päringu kompileerimise aja jälgimiseks tehke järgmist.

  1. Hõivake SQL-i Profiler jälg, kui käivitate päringu. Selleks jälgige TSQL: BatchCompleted ja TSQL: StmtCompleted sündmused või RPC: lõpetanud ja SP: StmtCompleted sündmused.

  2. Pange tähele, et partii CPU aeg ja lause CPU aeg.

  3. Lahutage lause CPU aeg partii CPU ajast. Tulemuseks on CPU aeg, mis võetakse partii sõelumiseks ja koostamiseks.

Lisateavet selle kohta, kuidas kasutada funktsiooni SQL-i, leiate järgmisest Microsoft Development Networki (MSDN-i) veebisaidilt.

Kuidas kasutada SISALDAVAid juhiseid Transact-SQL

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×