table表里的数据应该没有限制吧
解决方案 »
- 求助sqlserver语句
- 下午深圳某公司的面试题,还可以,大家看看
- 怎样执行字段中的表达式或函数
- 数据库用SQL Server身份验证无法展开,用windows身份验证可以展开。
- 如何写一个自定义函数,来得到汉字的第一字母?谢谢!!如“中国”得到‘ZG’
- sql2000插入数据库时遇到的问题! 急! 100分跪求!!!!!!!!!!!!!
- 存储过程能否实现事务处理的作用?
- 怎么创建一个简单数据库系统?请各位提建议
- 如何配置上下文选项.(用于对存在数据库当中的文档进行全文搜索.)
- 这样的sql应该怎么写??
- 怎么在存储过程中用sql语句创建一个指定在sql server服务器上路径,指定名称的文件夹?
- 求分类汇总的相关语句。
改写成exists(select....)的形式,这样效率更高点!
from 表 a join(
select id form table
)b on a.id=b.id
谢谢 shuiniu,exists为什么会比in有效率呢?
select count(*) from stuff where id_no in('0','1')
对于上而这句,where条件中的'in'在逻辑上相当于'or',所以语法分析器会将in ('0','1')转化为id_no ='0' or id_no='1'来执行。我们期望它会根据每个or子句分别查找,再将结果
相加,但实际上(根据showplan),它却采用了"OR策略",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,因此,表扫描的次数是很多次的exists 是返回标志true(扫描到满足条件的记录),或返回false,而不需要完整搜索整个表,也不需要返回结果集,所有比in有效率,但它也要多次扫描表,进行判断用join的话,则只扫描一次table,再与第一个表做联合筛选所以理论上来说,三种方法的效率由低到高是:in exists join
扫描整个表,发现记录符合条件即跳出子查询!
select * from id=1 or id=2 or id=3 or ......id=n
这个n可以有多大呢,无限大肯定不可能吧,那么他是由什么限定呢
络数据包大小是表格格式数据方案 (TDS) 数据包的大小,该数据包用于应用程序和关系数据库引擎之间的通讯。默认的数据包大小为 4 KB,由 network packet size 配置选项控制。
上面的 65,536 * 网络数据包大小 这个公式中,为什么要语句的长度*数据包的大小呢
我的理解是一个sql语句只有65536的长度,如果in子句大于65536那就应该出错了,或者大于数据包的大小的时候也应该出错,为什么是两个的乘积呢???
我刚才用下面的程序测试了一下(c#),结果发现n=3000时就出错了(n=2000时还是对的)。
还有没有可能别的东西约束了它的长度?????
-----------------------------------------
string s="";
int n=0;
n=Convert.ToInt32(textBox1.Text);
for(int i=0;i<n;i++){s+=(i+",");}
s+="0";
string strConnection="连接字符串";
SqlConnection conn=new SqlConnection(strConnection);
string sql="select * from students where studentid in("+s+")";
DataSet ds=new DataSet();
try
{
SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
adapter.Fill(ds);
MessageBox.Show("ok!!");
}
catch
{
MessageBox.Show("错了!!");
}
select @s1='',@s2='',@s3='',@i=0
while @i<1500
select @s1=@s1+','+cast(@i as varchar)
,@s2=@s2+','+cast(@i+1500 as varchar)
,@s3=@s3+','+cast(@i+3000 as varchar)
,@i=@i+1
set @s1=substring(@s1,2,8000)
exec('select name from sysobjects where id in('+@s1+@s2+@s3+')')
可能是超时的原因,但是我在数据库连接里已经设置为没有时限了,上面的程序到底哪有问题>????
如果想要查找多个相关的子查询的话,应该用exist命令