繁体   English   中英

有关SQL性能的建议

[英]Suggestion for SQL performance

每次用户访问该页面时,我都使用logtime对其进行记录,现在我想查找ID为“ MyID”的用户的最新100页。

我使用以下SQL选择不同的记录,但性能不好。 有人可以提出改进建议吗?

Select distinct Top 100 Url,PageName,
(select top 1 inner_pa.LogTime from PageActivity inner_pa with(nolock) 
where inner_pa.Key = pa.Key
and inner_pa.UserID='MyID'
order by inner_pa.LogTime Desc) as LogTime 

From PageActivity pa WITH(NOLOCK) 
Where pa.UserId='MyID'

Order By LogTime DESC

=================================

表架构如下

ID         int(PK)
PageName   varchar
Key        varchar
Username   varchar
Url        text
LogTime    datetime

所以,如果我有以下记录

ID  PageName  Key    UserName  Url           LogTime
1   PageA     post   MyID      PageA.html    2011/1/1/12:10:10
2   PageA     post   MyID      PageA.html    2011/1/1/12:10:15
3   PageB     post   MyID      PageB.html    2011/1/1/12:10:30
4   PageB     post   MyID      PageB.html    2011/1/1/12:10:45
4   PageB     post   OtherID   PageB.html    2011/1/1/12:10:48

我想要的查询结果是

PageName    Url
PageA       PageA.html
PageB       PageB.html

================================================== ===================

事情变了。 现在,网址将与不同表格中的字段合并,例如

Select distinct Top 100 pa.PageName,
pu.URL + '=' + pa.Key as URL, 
(select top 1 inner_pa.LogTime from PageActivity inner_pa with(nolock) 
 where inner_pa.Key = pa.Key 
 and inner_pa.UserID='MyID' 
 order by inner_pa.LogTime Desc) as LogTime 
From PageActivity pa WITH(NOLOCK) 
Join PageUrl pu on pa.UrlID = pu.ID
Where pa.UserId='MyID' 
Order By LogTime DESC

有任何想法吗?

不需要内部查询-只需按PageName / URL分组即可。

SELECT TOP 100 
    PageName, URL
FROM PageActivity
GROUP BY PageName, URL
WHERE UserID = 'MyId'
ORDER BY LogTime DESC

我假设您正在使用MsSql,将查询放入数据库引擎优化顾问中。 它将为您提供所有必要的建议以提高性能,从而使您可以根据需要创建索引和统计信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM