Zlepšenie výkonnosti v SQL Server celotextového dotazoch

Preklady článku Preklady článku
ID článku: 2549443 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Súhrn

Tento článok popisuje metódu zlepšiť výkonnosť dotazov Microsoft SQL Server, ktorý použiť celotextové vyhľadávanie predikáty (napríklad obsahuje a CONTAINSTABLE) a ktoré tiež filtrovať údaje. Napríklad, táto metóda zlepšuje výkon nasledovný dotaz:
select * from dbo.ftTest where CONTAINS(TextData, '"keyword"') and CDate > @date
Táto metóda umožňuje návrh dotazu a schémou tabuľky celotextového indexu tak, že full-textové vyhľadávací nástroj, ktorý filtruje výsledky pred ich odoslaním do relačných motora. Preto relačné motor nemusí filtrovať veľké dataset.

Ďalšie informácie

Pri vytváraní full-textové vyhľadávací dotaz, faktor ovplyvňuje výkon dotazu je množstvo údajov, ktoré full-textové vyhľadávací nástroj, ktorý musí spracovať pred zostávajúce údaje sa odošlú do relačných motora. V SQL Server, môžete zlepšiť výkon dotazu filtrovaním riadkov skoro znížiť počet riadkov, ktoré musia byť spracované neskôr.

Vo verziách servera SQL Server, ktoré boli vydané pred SQL Server 2008, full-textové vyhľadávací nástroj vráti všetky riadky, ktoré zodpovedajú hľadaného výrazu, a potom relačné motor platí žiadne filtre. Zlepšenie tohto správania boli vykonané v SQL Server 2008, SQL Server 2008 R2 a SQL Server 2012. Avšak, je ťažké používať tieto zlepšenia, pretože full-textové vyhľadávanie indexy sú organizované veľmi odlišne od databázy indexov. Navyše, full-textové vyhľadávací nástroj a relačných motor pracovať veľmi odlišne. Preto metódy, ktoré popisuje tento článok používa Table-Valued funkcia (TVF) na filtrovanie riadkov skoro a znížiť počet riadkov, ktoré musia byť spracované neskôr.

Napríklad nasledovný dotaz plán vráti 131051 riadky, ktoré spĺňajú obsahuje hľadaný reťazec. Navyše operátora spojenia v pláne vykoná dodatočné filtrovanie pomocou indexu vyhľadávania.
Rows StmtText 
-------------------- -----------------------------------------------------------------------------------------------------------
1167 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate> '08/05/2019' 

1167 |--Merge Join(Left Semi Join, MERGE:([FTSdb].[dbo].[fttest].[ID])=(FulltextMatch.[docid]), RESIDUA
5858 |--Sort(ORDER BY:([FTSdb].[dbo].[fttest].[ID] ASC)) 
5858 | |--Clustered Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[clidx1]), SEEK:([FTSdb].[
131051 |--Table-valued function 
Však, ak dotaz zahŕňa full-textové jedinečný index kľúčový stĺpec ako predikát, full-textové vyhľadávací nástroj slúži predikát filtrovanie výsledkov na úrovni full-textové. V tejto situácii, TVF vráti oveľa menšie množstvo údajov pred ďalšími filtrovanie musí uplatniť. Napríklad nasledovný dotaz určuje päť hodnôt musí zodpovedať stavu c2 a TVF vráti iba výsledky, ktoré zodpovedajú piatich hodnôt:
Rows StmtText 

-------- ---------------------------------------------------------------------------------------------------------------------------------
5 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate > '08/05/2019' and ID in ( 654051, 644051, 649106, 465, 105)

5 |--Nested Loops(Left Semi Join, OUTER REFERENCES:([FTSdb].[dbo].[fttest].[ID])) 
5 |--Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[idx1]), SEEK:([FTSdb].[dbo].[fttest].[ID]=(105) OR ...
5 |--Table-valued function
Fulltextové vyhľadávače schopnosť tlačiť nadol hodnôt, ktoré používa jedinečný index kľúča je základom pre túto metódu.

Ak predikátu obsahuje stĺpec typu údajov DateTime, môžete zahrnúť informácie o dátume v stĺpci jedinečný index kľúča tak, že sú emitované iba riadky, ktoré spĺňajú tento predikát. Na tento účel musí logicky začleniť dátum informácie stĺpca kľúča. Avšak, môže tiež musíte zmeniť kľúčový stĺpec Typ údajov a aplikácie, ktoré používajú dotaz.

Implementovať metódu, zmeniť typ údajov celotextové unikátny kľúč ID BIGINT. Prvé 4 bajty kľúča ID zachytenie rok, mesiac a dátumových hodnôt zo stĺpca dátum a posledné 4 bajty zostávajú rovnaké. Napríklad prvý bajt kľúča ID môže byť rok, ďalšie byte môže byť na mesiaci a posledné dva bajty môže označovať dátum. Žiadosť musí prispôsobiť túto zmenu typu údajov.

Potom preložiť rozsah predikátu predikát na kľúč ID. Napríklad, "x<>< y"="" range="" predicate="" can="" be="" translated="" to="" the="" "(x*2^32="">< id="">< y*2^32)"="" predicate.="" because="" the="" translated="" predicate="" is="" a="" predicate="" on="" the="" full-text="" key,="" the="" predicate="" will="" be="" pushed="" down="" into="" the="" full-text="" streaming="" table-valued="" functions="" (stvf).="" this="" behavior="" effectively="" performs="" searches="" within="" the="" date="">

Vlastnosti

ID článku: 2549443 - Posledná kontrola: 22. marca 2013 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Enterprise Evaluation
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
  • Microsoft SQL Server 2012 Enterprise
Kľúčové slová: 
kbmt KB2549443 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 2549443

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com