一个SQL分页查询的优化问题

wuxiaoqqqq 2009-11-02 01:47:22
A表是博客信息表,里面字段有BlogId,UserId,Title,BlogText等信息
B表是注册用户表,里面字段有UserId,Password,LogonName,Icon等信息
两个表的数据都在100W左右

现在页面分页查询博客表的记录,也要取出来用户表中的LogonName和Icon。

LogonName有时候在某些时候会做为条件。

现在查询语句如下
SELECT BlogId,UserId,Title, BlogText, Icon
FROM
(SELECT
ROW_NUMBER() OVER (order by b.BlogId) as RowNumber,
b.*, u.Icon
FROM BlogInfo AS b
inner join UserInfo u On b.UserId=u.UserId
where
//某些情况下有这个条件
u.LogonName IN(参数)
) t

where rownumber>500000 and rownumber<500010

这样写的话,结果基本不能出来
如果不用Inner Join的话,时间一般就是0ms
这个地方为什么会这样?
怎么样去查询最好?
...全文
104 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxiaoqqqq 2009-11-02
  • 打赏
  • 举报
回复
谢谢大家,我在UserInfo上加上with (nolock)后,查询正常了。
--小F-- 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuxiaoqqqq 的回复:]
UserInfo这个表的Update操作比较多,这个是不是会有关系?
[/Quote]

有关系
wuxiaoqqqq 2009-11-02
  • 打赏
  • 举报
回复
UserInfo这个表的Update操作比较多,这个是不是会有关系?
wuxiaoqqqq 2009-11-02
  • 打赏
  • 举报
回复
我改成了
SELECT t.BlogId,t.UserId,t.Title, t.BlogText, u.Icon
FROM
(SELECT
ROW_NUMBER() OVER (order by b.BlogId) as RowNumber,
b.*, u.Icon
FROM BlogInfo AS b

where
b.UserId in (select UserId from UserInfo where
LogonName IN(参数))
) t
inner join UserInfo u On t.UserId=u.UserId

这样速度就要快很多了,为什么?
Q315054403 2009-11-02
  • 打赏
  • 举报
回复
有偿专业支持
sundotLei 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fwacky 的回复:]
SQL codewhere//某些情况下有这个条件
u.LogonNameIN(参数)

该敢修改成where u.LogonNamelike ('%%')--某些情况下有这个条件
[/Quote]
UP

这种较大数据量的表最好别用in ,not in,此外检查下表的索引配置.
fwacky 2009-11-02
  • 打赏
  • 举报
回复


where
//某些情况下有这个条件
u.LogonName IN(参数)

该敢修改成
where u.LogonName like ('%%') --某些情况下有这个条件




--小F-- 2009-11-02
  • 打赏
  • 举报
回复
要不你把
SELECT
ROW_NUMBER() OVER (order by b.BlogId) as RowNumber,
b.*, u.Icon
FROM BlogInfo AS b
inner join UserInfo u On b.UserId=u.UserId
where
//某些情况下有这个条件
u.LogonName IN(参数)
放临时表里面去试下
--小F-- 2009-11-02
  • 打赏
  • 举报
回复
这个语句没有多大的优化余地了啊
wuxiaoqqqq 2009-11-02
  • 打赏
  • 举报
回复
怎么没人来啊,我加点分
wuxiaoqqqq 2009-11-02
  • 打赏
  • 举报
回复
速度很慢的那种,跟inner join肯定有关系.
B跟A的关系是1对多,所以最后的记录跟A表是一样的。
差不多100W,直接对A表操作也是这么多,所以我有点想不通为什么会一直运行查询不出结果。
wuxiaoqqqq 2009-11-02
  • 打赏
  • 举报
回复
现在这样查不出来数据,就是一直在运行
贾桂权 2009-11-02
  • 打赏
  • 举报
回复
首先要看你Join后的数据一共多少条?

rownumber>500000 and rownumber <500010 只有数据在此区间才可以显示出数据的。

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧