Підвищення продуктивності повнотекстового запитів в SQL Server

Переклади статей Переклади статей
Номер статті: 2549443 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

Підсумки

У цій статті описано спосіб підвищення продуктивності сервера Microsoft SQL запитів що використовувати пошук предикати (наприклад, МІСТИТЬ і CONTAINSTABLE), і які також фільтрувати дані. Наприклад, цей метод підвищує продуктивність такий запит:
select * from dbo.ftTest where CONTAINS(TextData, '"keyword"') and CDate > @date
Цей метод дає змогу конструктора запит на змінення, схеми таблиці та повнотекстовий індекс таким чином, що пошук двигун відфільтровує результатів перед відправленням до реляційних двигуна. Таким чином, реляційних двигун не потрібно фільтрувати великий набір даних.

Додаткові відомості

Під Вільний час створення уведення запит принцип фактор що впливає на продуктивність запит на змінення є кількість даних, що засіб повнотекстового пошуку слід обробити перед інших даних надсилається до реляційних двигуна. У SQL Server можна підвищити продуктивність запит на змінення відфільтровуючи рядки рано, щоб зменшити кількість рядків, які слід обробити пізніше.

У версії SQL Server, які були випущені раніше SQL Server 2008 Пошук двигуна повертає всі рядки, які відповідають слову для пошуку і потім реляційних двигун відноситься будь-яких фільтрів. SQL Server 2008, SQL Server 2008 R2 і SQL Server 2012, внесені поліпшення до такої поведінки. Однак, це важко використовувати ці поліпшення, оскільки пошук індекси організовані дуже по-різному від базу даних індексів. Крім того, Пошук двигуна і реляційних двигун працюють дуже по-різному. Таким чином, метод, описані використовує функції Table-Valued (TVF), відфільтрувати рядки рано і зменшити кількість рядків, які слід обробити пізніше.

Наприклад, наступні плану запит на змінення повертає 131051 рядки, які відповідають МІСТИТЬ рядок пошуку. Крім того, оператор об'єднання в плані виконує додаткові фільтрування за допомогою індексу пошуку.
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 
Однак, якщо запит містить повнотекстового унікальний індекс впорядкована стопка карт з чергуванням кольорів ключа як предиката, Засіб повнотекстового пошуку можна використовувати предикат для фільтрації результатів на рівні повнотекстового. У цій ситуації на TVF повертає набагато меншу кількість даних, перш ніж додатковою фільтрацією потрібно застосувати. Наприклад, такий запит визначає п'ять значень, які мають відповідати c2 умова, і на TVF повертає лише ті результати, які відповідають п'ять значень:
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
Засіб повнотекстового пошуку можливість підштовхнути вниз значень, які використовуються унікальний індекс ключа є основою такий метод.

Якщо предиката містить стовпець тип даних дати й часу, можна включити відомості про дату в унікальний індекс впорядкована стопка карт з чергуванням кольорів ключа так, що лише рядки, які відповідають цей предикат що викидаються. Для цього ви повинні логічно включити дату відомостей впорядкована стопка карт з чергуванням кольорів ключа. Однак, також можливо для змінення типу даних впорядкована стопка карт з чергуванням кольорів ключа і додатків, що використовують запит.

Для впровадження методу, змініть тип даних повних текстів унікальний ідентифікатор для BIGINT ключа. Перші 4 байт ключа ID захоплення рік, місяць і значення дат від впорядкована стопка карт з чергуванням кольорів дат і останні 4 байт залишаються тими ж. Наприклад, першого байта ключ, Ідентифікатором може звернутися до року, наступного байт може звернутися до місяця, і Останні два байти може звернутися до дати. Застосування повинні враховувати зміни типу даних.

Потім перевести діапазон предикат до предикат ключа ідентифікатора. Наприклад, "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="">

Властивості

Номер статті: 2549443 - Востаннє переглянуто: 22 березня 2013 р. - Редакція: 2.0
Застосовується до:
  • 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
Ключові слова: 
kbmt KB2549443 KbMtuk
Машинний переклад
УВАГА! Цю статтю переклала програма машинного перекладу Microsoft, а не людина. Корпорація Microsoft пропонує вам як машинні переклади, так і переклади фахівців, щоб Ви мали доступ до всіх статей бази знань рідною мовою. Проте стаття, яку переклав комп’ютер, не завжди бездоганна. Вона може містити лексичні, синтаксичні або граматичні помилки. Так само помиляється іноземець, спілкуючись вашою рідною мовою. Корпорація Microsoft не несе відповідальність за жодні неточності, помилки або шкоду, завдану неправильним перекладом змісту або його використанням з боку користувачів. Крім того, корпорація Microsoft часто оновлює програму машинного перекладу.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 2549443

Надіслати відгук

 

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