【发布时间】:2014-08-27 07:37:01
【问题描述】:
我对这个查询(视图)有些问题。
我使用的是 SQL Server 2012。 记录很少,查询很快,但之后我只添加了 1000 条记录(链接),它变得非常慢(超过 23 秒)
我必须为数据库中的每个主机获取一个随机链接,所以我使用了 Row_Number 和分区。
links 表有 1000 条记录,host 表有 10 条记录,但是查询很慢
对提高性能有什么建议吗?
更新我需要为每个主机获取一个随机链接(可能是 1 或 2 或 3 取决于 Host.numLinksPerWork)
;WITH MyCte As
(
SELECT DISTINCT link.namUrl, host.uidHost, host.namHost AS Hostname,
[user].uidUser, usrProfile.UserName AS Username, host.numLinksPerWork,
referer.namUrl AS refererLink,host.Min, host.Max,ROW_NUMBER()
OVER (PARTITION BY host.numLinksPerWork, host.uidHost ORDER BY newid()) AS Number
FROM Links link JOIN
Users[user] ON [user].uidUser = link.codUser JOIN
Profile usrProfile ON usrProfile.UserId = [user].uidUser JOIN
Hosts host ON host.uidHost = link.codHost JOIN
Referers referer ON referer.codHost = host.uidHost JOIN
Referers referer2 ON referer.codUser = [user].uidUser
WHERE [user].flgBanned = 0
)
SELECT MyCte.uidHost, MyCte.uidUser, MyCte.namUrl, MyCte.refererLink,
MyCte.Hostname, MyCte.Username, MyCte.Min, MyCte.Max FROM MyCte
WHERE MyCte.Number <= MyCte.numLinksPerWork!
【问题讨论】:
-
上下文不足。
-
查询下也有一个图表屏幕。顺便说一句,我更新了问题
标签: sql sql-server performance tsql