我爱Aspx >> C#.Net >> 用共享游标提升 SQL 性能SELECT * FROM T1, T2 WHERE (T1.N <= 500) AND (T1.N1 = T2.N2)
根据(N<=100)和(N<=500)的行数,值在字段N中的分布,在N, N1或N2上索引的可用性等情况,可能有不同的最优计划。例如,第一个语句可能使用一个在T1上的索引,而第二个语句可能是在T1上做全表扫描。或者第一个语句可能是作一个哈希连接而第二个语句可能是做一个嵌套循环连接。这些语句响应地可以当作是非最优化共享语句,因此:
非最优化共享语句是可能具有不同最优计划的相似语句。
同样也意味着如果非最优化共享语句共享同样的游标,那么在执行效率上可能会存在损失。
最优共享与非最优共享语句
最优共享和非最优共享语句的区别并不纯粹是在语义上的。它依赖于下面的因素:
l 文字标量在语句中的位置(例如,是在VALUES子句中还是在WHERE子句中)
l 可用的访问路径(例如,索引的存在)
l 如果一个文字标量出现在一个包含字段的谓词中(如,N<=100用到了在字段N上的统计值的可用性),则取决于数据分布(统计值)和它的可用性
l 优化器的算法使用
非共享语句
因为使用同样的游标会产生不正确的结果,会出现相似语句不能共享同一个游标的情况。这些相似语句意味着不同的事情,或者在执行期间做了完全不同的事。下面的语句描述了这一点:
SELECT * FROM T ORDER BY 1,4
SELECT * FROM T ORDER BY 2,3
在这个例子中,文字标量1,2,3和4指的是选择表项中的项目。这些语句叫做非共享语句。因此有:
非共享语句是不能共享同样的执行计划的相似语句。
这里最重要的一点就是:如果两个非共享语句共享同样的游标,它们其中一个就会得到错误的结果。
解决方案
这一节描述通过cursor_sharing参数所提供的解决方案
Ҷƪл˵?
SQL Server 2005 创建登录时提示..[07-30]
Mysql关于数据库和表的几个最基本..[07-30]
成批更改sql server数据库所有者..[07-30]
一个非常简单的分页技术MYSQL+JS..[07-30]
VFP中用SPT访问SQL Server数据库[07-30]
动态创建MSSQL数据库表存储过程[07-30]
SQL SERVER 2000 安装(症状归纳..[07-30]
Mysql数据库操作新手入门,手把手..[07-30]
SQL Server 存储过程嵌套示例[07-30]
教你轻松应对JSP连接MySQL数据库..[07-30]
C#图像放大问题解决方法[07-30]
SQL Server 2005 创建登录时提示..[07-30]
Mysql关于数据库和表的几个最基本..[07-30]
成批更改sql server数据库所有者..[07-30]
ASP.NET--制作功能完善的安装程序[07-30]
用PHOTOSHOP制作漂亮的边框[07-30]
免费QQ秀再赠送 每天限量3000套开..[07-30]
Windows Vista系统自带防火墙高级..[07-30]
Word 2007里写日志 再直接发布到..[07-30]
自己动手 让Firefox 2.0用上迅雷..[07-30]