请教:关于SQL 视图效率的问题

landry1234 2015-05-18 02:22:08
有一个文章表,表中含有分类ID的外键(category_id),通过这个ID区查询分类表的分类名称,考虑到在循环输出数据时每一条记录都要去重新数据库往返一次,假设当前页面显示20条数据,那么就要执行20次数据库往返操作,因此用视图连接两个表


SELECT dbo.notice_category.title AS category, dbo.notice.*
FROM dbo.notice_category, dbo.notice where dbo.notice_category.id = dbo.notice.category_id


如果数据量大时,假设这个表有几百万的记录,那么意味着每次SQL SERVER 都要将这百万条数据整合到一个虚拟表,相比往返20次,是不是效率更低而得不偿失呢?
...全文
214 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zdrone 的回复:]不用担心这个问题,视图只是存储的一段代码,你使用select * from view 这个view可能执行需要10秒,但是如果你加上where条件后,再运行可能只需要1秒 [/Quote]
这可不一定,分页是以全集为依据的,过滤条件几乎不可能代进去。
zdrone 2015-05-21
  • 打赏
  • 举报
回复
不用担心这个问题,视图只是存储的一段代码,你使用select * from view 这个view可能执行需要10秒,但是如果你加上where条件后,再运行可能只需要1秒
薛定谔的DBA 2015-05-20
  • 打赏
  • 举报
回复
楼主要实现的功能是什么?要循环查表,主要还是解决这个
还在加载中灬 2015-05-18
  • 打赏
  • 举报
回复
就算用视图,除非你持久化,不然也不会真实存在这个数据表,查询视图之后,还是会去查源表
landry1234 2015-05-18
  • 打赏
  • 举报
回复
引用 2 楼 ky_min 的回复:
数据库很聪明,事实上不是先整合成一个虚拟表,有过滤条件就提前带入了,而你只取20条(TOP 20)的前提,也考虑进去了,去关联查询的也只有20条,如果20条是有排序的,慢的也就是连接的原因,是你本身就是几百万数据排序的原因 总言,连接比你循环取20次要好,你的分类表肯定不是很大的那种
分类表是不大,但是内容表数据量大,而且得出的虚拟表(视图)数据量和内容表是一模一样的,我只是从这个虚拟表里取20条
还在加载中灬 2015-05-18
  • 打赏
  • 举报
回复
数据库很聪明,事实上不是先整合成一个虚拟表,有过滤条件就提前带入了,而你只取20条(TOP 20)的前提,也考虑进去了,去关联查询的也只有20条,如果20条是有排序的,慢的也就是连接的原因,是你本身就是几百万数据排序的原因 总言,连接比你循环取20次要好,你的分类表肯定不是很大的那种
Tiger_Zhao 2015-05-18
  • 打赏
  • 举报
回复
不要用视图。
先做分页后,得到的20条记录再和分类表连接返回结果。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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