我正在尝试构建一个表格来总结我们 Wiki 中的页面引用某些宏的次数。
我已经建立了一个名为 @currentpages 的临时表,它有 55k 行,如下所示:
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);
(我已经简化了上面的内容;它实际上有大约 40 列,如 Macro1、Macro2 等。)我试图计算有多少引用(在@currentpages 中)对这些不同的宏。
我通过为每个可能的 SpaceKey 值创建一行来初始化 @usage 表,将所有 Macro"x" 计数器清零:
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 上。
非常感谢,贝茜