SQL 2005インデックス付きビューでのフルテキストインデックス作成のパフォーマンス
-
05-07-2019 - |
質問
インデックス付きビューを作成しました:
CREATE VIEW LogValueTexts WITH SCHEMABINDING AS
SELECT ISNULL(LRVS_SLOG_ID*256+LRVS_IDX,0) AS ID,LRVS_VALUE AS Value
FROM dbo.LRVS_LogRecordedValues WHERE LEN(LRVS_VALUE)>4
CREATE UNIQUE CLUSTERED INDEX IX_LogValueTexts ON LogValueTexts (ID)
SQL 2005 Standard SP3では、フルテキストインデックスがビューのすべての行に対して次のクエリを実行するため、そのビューにフルテキストインデックスを作成するのに時間がかかります。
SELECT COLUMN FULLTEXTALL FROM[dbo].[LogValueTexts] WHERE COLUMN FULLTEXTKEY = @p1
COLUMN FULLTEXTALL
および COLUMN FULLTEXTKEY
は実際には Value
および ID
であると想定していますが、それはSQL Serverプロファイラーが表示されます。問題は、ビューでインデックスを使用しないため、クエリプランが約1100万行/ 1 GBのデータに対してクラスター化インデックススキャンを使用することです。
そのクエリのプランガイドを作成しようとしましたが、標準のT-SQLクエリではないため、許可されません(キーワード 'FULLTEXTKEY'
の近くの構文が正しくありません)。
このフルテキストインデックスを機能させる方法は次のとおりです:
- 正常に動作するSQL 2008(またはSQL 2005 Enterprise)へのアップグレード。
- 固有のIDと基礎となるテーブルのカバーリングインデックスの作成。
11M行のサブセットのみがフルテキストインデックス作成を必要とするため( LRVS_VALUE
は、多くの場合 NULL
であるか、非常に短いテキスト値です。
解決
データがわかりません。元のテーブルに全文索引を配置できないのはなぜですか?計算列をテーブル構造に追加できます。そうすれば、インデックスの再構築操作ができません(スキャンの原因だと思います)
それができない場合、次の最も簡単な変更は、spまたはトリガーが設定されたルックアップテーブルを作成し、クエリの意味がわかるようにテーブルのインデックスを変更できるようにすることです。
最後のオプション(および適切な結果を得るために時間をかける必要があるオプション)は、パーティションテーブルを使用することです。ビューでフィルタリングされたデータをカバーするパーティションを作成できます。全文はテーブル全体にインデックスを付けます。実行時のクエリは、関連データを含むパーティションテーブルにヒットします。