KB2491510 - Ispravka:Upit koji ima predikat CONTAINS u odredbi WHERE potrebno je mnogo vremena za prevoženje u SQL Server 2008 ili SQL Server 2008 R2

Microsoft distribuira Microsoft SQL Server 2008 servisni paket 1 (SP1) ili SQL 2008 R2 ispravke kao jednu datoteku koja se može preuzeti. Pošto su ispravke kumulativne, svako novo izdanje sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje SQL Server 2008 SP1 ili SQL 2008 R2 ispravke.

Simptomi

Razmotrite sledeći scenario:

  • U sistemu Microsoft SQL Server 2008 ili SQL Server 2008 R2 pokrenete upit u odnosu na određenu kolonu u tabeli koja ima mnogo redova. Upit ima predikat CONTAINS u odredbi WHERE.

  • Termin koji koristite za predikat CONTAINS sadrži reč. Reč će se pojaviti u nekim kolonama koje su uključene u indeks celog teksta tabele.

U ovom scenariju, upitu je potrebno mnogo vremena da se sastavi. Na primer, do ovog problema može doći kada pokrenete sledeći upit:

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

Napomene

  • Pretpostavimo da se ".com" pojavljuje u nekim kolonama koje su uključene u indeks celog teksta tabele.

  • Možete da pratite vreme sastavljanja upita da biste utvrdili da li nailazite na ovaj problem. Detaljna uputstva o praćenju vremena sastavljaja potražite u odeljku "Više informacija".

Uzrok

Do ovog problema dolazi zbog greške u logici procene kardinalnosti za indekse celog teksta. U tom slučaju, skeniranje više kolona koje sadrže reč koja se često javlja izvršava se pre sužavanje opsega pretraživanja očekivanih kolona.

Rešenje

Kumulativne informacije o ažuriranju

SQL Server 2008 servisni paket 2

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 4 za SQL Server 2008 servisni paket 2. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2527180 Kumulativni paket ispravki 4 za SQL Server 2008 servisni paket 2Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravke za SQL Server 2008. Microsoft preporučuje da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2402659 SQL Server 2008 builds koji su objavljeni nakon što je SQL Server 2008 servisni paket 2 objavljen Hitne ispravke za Microsoft SQL Server 2008 kreirane su za određene SQL Server servisne pakete. Morate primeniti hitnu ispravku za SQL Server 2008 servisni paket 2 na instalaciju SQL Server 2008 servisnog paketa 2. Podrazumevano, sve hitne ispravke koje su obezbeđene u SQL Server servisnom paketu uključene su u sledeći SQL Server servisni paket.Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 13. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki za SQL Server 2008 SP1 kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2497673 Kumulativni paket ispravki 13 za SQL Server 2008 servisni paket 1 Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravke za SQL Server 2008 SP1. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

970365 SQL Server 2008 builds koji su objavljeni nakon što je SQL Server 2008 servisni paket 1 objavljen

SQL Server 2008 R2 servisni paket 1

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 1 za SQL Server 2008 R2 servisni paket 1. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2544793 Kumulativni paket ispravki 1 za SQL Server 2008 R2 servisni paket 1Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje SQL Server 2008 R2 ispravke. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2567616 SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 Service Pack 1 was released

SQL Server 2008 R2

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 7. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki za SQL Server 2008 R2 kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2507770 Kumulativni paket ispravki 7 za SQL Server 2008 R2 Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje SQL Server 2008 R2 ispravke. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

981356 SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 was released

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".

Rešenje

Da biste rešili ovaj problem, upotrebite jedan od sledećih metoda:

  • Koristite * za uključivanje svih kolona u pretragu umesto jedne kolone. Ovo menja broj redova koji se zaista procenjuju pre nego što Integrisani ceo tekst sastavi svoju procenu kardinalnosti. Na primer, pokrenite sledeći upit:

    SELECT count(*) FROM dbo.MyLargeTabel where CONTAINS (*, '"test@contoso.com"')
  • Učinite reč zaustavljanja koja se često javlja pomoću izgovora ALTER FULLTEXT STOPLIST. Za više informacija o naredbi ALTER FULLTEXT STOPLIST za Transact-SQL posetite sledeću Microsoft Developer Network (MSDN) Veb lokaciju: Opšte informacije o naredbi ALTER FULLTEXT STOPLIST za Transact-SQL

Više informacija

Da biste pratili vreme prevoрeja upita, sledite ove korake:

  1. Uhvatite praćenje SQL profilatora kada pokrenete upit. Da biste to uradili, pratite događaje TSQL:BatchCompleted i TSQL:StmtCompleted ili RPC:Completed i SP:StmtCompleted.

  2. Imajte na kraju vreme grupnog procesora i vreme procesora izjave.

  3. Oduzmite vreme CPU-a izvoda od vremena procesora grupe. Rezultat označava vreme procesora koje je potrebno za raščlanj i sastavljanje grupe.

Za više informacija o korišćenju predikata CONTAINS za Transact-SQL posetite sledeću Microsoft Razvojnu mrežu (MSDN) Veb lokaciju:

Korišćenje PREDIKATA CONTAINS za Transact-SQL

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

×