易截截图软件、单文件、免安装、纯绿色、仅160KB

sql中and及or 的执行效率

应用中发现sql中的and及or的执行效率问题
sql语句,为什么把最后的or换成and,查询的就很快,使用的是mssql范例中northwind数据库为例,
select * from Orders a left join [Order Details] b on a.orderid = b.orderid
where a.customerid like '%ics%' or b.productid in (42,72)
追踪了语句的执行方案,发现使用or 时 是先执行的a 与b 交叉表,从结果集中再where出符合的记录,由于是全集交叉所以输出的数据量较大,执行的时间也就效长.
select * from Orders a left join [Order Details] b on a.orderid = b.orderid
where a.customerid like '%ics%' and b.productid in (42,72)
而and是先执行的where筛选出了符合的记录再做的交叉表,所以数据量少执行起来快.
相对于or 为了提高执行速度,想了一个办法,如下人为控制执行方案先筛选wher后交叉left
set statistics time on
select * from (select * from Orders where customerid like '%ics%') a left join
 (select * from [Order Details] b where productid in (42,72)) b on a.orderid = b.orderid
set statistics time off


相关文档:

SQL Server 系统全局变量

SQL Server 系统全局变量
@@CONNECTIONS
返回自上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS
返回连接上最后打开的游标中当前存在的合格行的数量(返回被打开的游标中还未被读取的有效数据行的行数)
@@DATEFIRST
返回每周第一天的数字
@@ERROR
返回最后执行的SQL 语句的错误代码。
@@FETCH_STATUS
返回 ......

SQL Server存储过程中raiserror的使用


一 系统预定义错误代码
SQL Server 有3831个预定义错误代码,由master.dbo.sysmessages表维护。每一个错误代码都有相应的级别和描述。
错误定义的级别从0到25。20以上的错误代表重大错误,通常意味着该错误会导致存储进程立刻终止,并且所有的客户连接都要重新初始化。
非关键性错误只是禁止掉当前运行的程序行,并继 ......

SQL Server中的行列倒置技巧

行列倒置在sql server中是一种很常见的技巧,在做应用系统的时候,经常需要做一些统计功能避免不了使用行列倒置这个技巧,我小小的做了一下总结:
第一种:sql server 2000中使用case进行行列倒置
create table RowCellConvertTest
(
 grade varchar(50),
 sex varchar(50),
 studentCount int
)
......

实例名 (SQL Server Express)

使用 Microsoft SQL Server 安装向导的"实例名"页,可指定创建默认实例还是创建 SQL Server Express 命名实例。除非您选择默认实例,否则 SQL Server Express 将始终安装命名实例 (SQLExpress)。此行为与 SQL Server 2005 不同,后者在未选择命名实例的情况下,将始终安装默认实例。
 选项
选项
说明
默认实例 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号