高分题?菜鸟题!

tamade1234 2004-11-20 07:16:52
1. select * from (select....) as tmpTbl where tmpTbl.ID in (select....) <其中select....返回的是同一个表>
与 insert into #tbl (select....); select * from (#tbl) where ID in (#tbl)
哪个效率更高??前者是否会执行两次相同的(select....)

2. 如何在存储过程的语句中使用变量?
create proc test
@i int
as
select * from tbl where ID= @i --写法对不对???
GO

3.表变量和临时表到底有什么区别?有什么限制?哪个效率高?
declare @tbl table(tid int)
create #tbl (tid int)
以上两个东东分别用在什么地方?不能用在什么地方?哪个效率高?
...全文
152 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenhongL 2004-11-21
  • 打赏
  • 举报
回复
1、 select * from (#tbl) where ID in (#tbl) 后面的where 有必要吗?
lyzzbbgo 2004-11-21
  • 打赏
  • 举报
回复
做个标记
david4 2004-11-20
  • 打赏
  • 举报
回复
回答:就问题3再问一下:

#tblTmp生命周期存在于Client的会话周期内,如果Client 断开连接,系统会回收#tblTmp
Client B创建#tblTmp其实与Client A创建的#tblTmp不同,你查询object可以看到两个#tblTmp其实被命名为#tblTmp_____0000AA和#tblTmp______0000BB(实际的名称可能不同),其实他们是两个对象
@tblTmp同样,不会冲突
jiangqiaohua 2004-11-20
  • 打赏
  • 举报
回复
为什么我的MYSQL只能安装在C盘,
不能安装到其他盘,
安装到其他盘启动服务的时候会说进程意外终止。
有类试经历的说说啊!
mgsray 2004-11-20
  • 打赏
  • 举报
回复
就问题3再问一下:

在Multi Client环境里,创建临时表和表变量各有何优势劣势?

例如,Client A创建了#tblTmp,没有显式Drop table时,何时系统会销毁#tblTmp?
在系统回收#tblTmp之前,Client B又要创建#tblTmp(调用同一个存储过程),会不会冲突?
表变量@tblTmp会有相同问题吗??
会在会话结束的时候drop掉
这样不会有问题的.附带说一下如果创建的是##tbltmp全局临时表就有冲突的问题了.
表变量不会有这样的问题.
tamade1234 2004-11-20
  • 打赏
  • 举报
回复
就问题3再问一下:

在Multi Client环境里,创建临时表和表变量各有何优势劣势?

例如,Client A创建了#tblTmp,没有显式Drop table时,何时系统会销毁#tblTmp?
在系统回收#tblTmp之前,Client B又要创建#tblTmp(调用同一个存储过程),会不会冲突?
表变量@tblTmp会有相同问题吗??
mgsray 2004-11-20
  • 打赏
  • 举报
回复
写错了,是全局临时表...昏了
create table ##tbname(...)
这样的就是全局临时表,在会话结束后不会自动删除,只有显式的删除.同时别的会话可以访问它,就好像一个正常的数据表一样,不同的是它存储在tempdb中,并且不用写数据库名就可以访问.
zjcxc 元老 2004-11-20
  • 打赏
  • 举报
回复
注意
mgsray(我是新新新新,新来的吧) 说的全局表变量是没有的,SQL中根本没有全局变量(包括表变量)
从他说的前后语句上分析,应该是笔误,他说的全局表变量应该是指全局临时表
zjcxc 元老 2004-11-20
  • 打赏
  • 举报
回复
1.如果数据量大,而且有条件,则一般是第二个效率高一些
反之则是第一个效率应该会高一些
这种一般得根据实际的数据去分析才能得到真正的效率区别


2.正确

3.表变量是创建在内存中,临时表是创建在tempdb数据库中
在操作上,临时表与普通表是一样的,可以创建索引,修改表结构
表变量只能在定义时决定其结构,定义好后不能再修改

如果数据量少的话,表变量的效率高,因为其操作全部在内存中
数据量大时,内存不够处理,那操作系统就会使用虚拟内存(实质上也是使用文件),这时效率反而低过临时表
tamade1234 2004-11-20
  • 打赏
  • 举报
回复
再问一下楼上的

3.全局表变量怎么使用???怎么写???
mgsray 2004-11-20
  • 打赏
  • 举报
回复
1.通常来讲前者效率高,不用写磁盘,具体情况难说,要看select的数据量有多少.
前者会有两次表扫描.
2.对
3.表变量写在内存里面,临时表写在tempdb里面,有磁盘i/o
少量数据用表变量,大量数据用临时表.
另外全局表变量可以和别的会话共享一个表,这个是表变量不具备的.

34,590

社区成员

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

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