我昨天已经问过类似的问题。 (Question)
但是在定制查询后 - 性能非常差。不知道如何建立一个快速查询
现状
表位(计数:800'000)
Id Number Leafnode From To VersionId
-- --------- -------- ---- ---- ---------
1 100200300 0 NULL NULL 33
2 100200301 1 NULL NULL 34
3 100200302 1 5 10 34
...
表变量(计数:1'300'000)
Id Number PositionId
-- ------ ----------
1 01 2
2 01 3
3 02 3
4 03 3
....
Table VariableText(Count:1'300'000)
Id Language Text VariableId
-- -------- ---------- ----------
1 1 Hello 1
2 2 Hallo 1
3 3 Salut 1
4 1 Bye 2
5 2 Tschau 2
...
我正在寻找一个好的执行查询(视图,存储过程,用户功能)。从我的应用程序,我想使用类似的查询:
SELECT Id, Number, Text, Variable
FROM <whatever>
WHERE Language = 2 AND Version = 34 AND Number IN (100200301, 100200305)
而结果是建议立即进行删除:
Id Number Text Variable
-- --------- ------ --------
2 100200301 Hallo 01
3 100200305 Tschau 01
...
UPDATE 我上传的数据库备份包含这三个上面描述的表格。 ( Backup)
我使用以下查询从位置表中返回'数字'和'id'。没有加入,也没有其他的东西。这个查询大约需要8分钟。
WITH C AS
(
SELECT T.Id, CAST(Number AS int) AS Nr, Version
FROM Position AS T
WHERE Leafnode = 1
UNION ALL
SELECT T.Id, Nr + 1 AS Expr1, T.[Version]
FROM dbo.Position AS T
INNER JOIN C ON C.Id = T.Id AND T.[To] > CAST(STUFF(Nr, 1, 6, '') AS int)
)
SELECT Id, Nr, [Version]
FROM C
WHERE Version = 34 AND Nr = '241521123'
OPTION (maxrecursion 0)
看看猜测和实际的查询计划 - 它甚至提供了潜在索引的提示!从SQL Management Studio中轻松查看,并包含可爱的图表。 – 2011-09-13 08:35:50