私たちの Wiki のページが特定のマクロを参照する回数をまとめた表を作ろうとしています。
次のような55k行の@currentpagesという一時テーブルを作成しました。
DECLARE @currentpages table(
ContentID NUMERIC(19,0) NOT NULL PRIMARY KEY,
PageTitle VARCHAR(255) NULL,
SpaceKey VARCHAR(255) NULL,
OriginalAuthor VARCHAR(255) NULL,
LastChangedBy VARCHAR(255) NULL,
LastChangedDt VARCHAR(10) NULL,
ContentBody TEXT NULL);
そして、次のような別のテーブル:
DECLARE @usage table(
SpaceKey VARCHAR(255) NOT NULL PRIMARY KEY,
Macro1 NUMERIC(19,0) NULL,
Macro2 NUMERIC(19,0) NULL,
Macro3 NUMERIC(19,0) NULL);
(上記を簡略化しました。実際には、Macro1、Macro2 などのように約 40 列あります) これらのさまざまなマクロへの (@currentpages 内の) 参照の数を取得しようとしています。
可能な SpaceKey 値ごとに行を作成し、すべての Macro"x" カウンターをゼロにして、@usage テーブルを初期化します。
INSERT INTO @usage (SpaceKey, Macro1, Macro2, Macro3)
SELECT S.spacekey, 0, 0, 0
FROM spaces S
ORDER BY S.spacekey
次に、いくつかの UPDATE ステートメントの最初のステートメントを実行して、各マクロ参照を識別します。
UPDATE @usage
SET U.AdvancedSearch = C.Counter
FROM @usage U
INNER JOIN (SELECT SpaceKey, COUNT(*) AS Counter
FROM @currentpages
WHERE ContentBody LIKE '%{search-%' GROUP BY SpaceKey) C
ON U.SpaceKey = C.SpaceKey
これは正常に動作しているように見えますが、非常に長時間実行されます。私がやろうとしていることをより効率的に行う方法はありますか?
このデータベースは SQL Server 2005 上にあります。
どうもありがとう、ベッツィ