首页 新闻 会员 周边 捐助

求数据库高手解答?

0
悬赏园豆:10 [已解决问题] 解决于 2016-09-30 09:07
 “e. 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num”
看了这句话 让人冷汗了一下 ,
估计 ORM 没有这么弱吧 ?
Orm这东西 没有系统深入研究过  我觉得orm全是用参数的, 不至于不用索引。 将信将疑。
有知道正解的请回答一下。
 
伊利丹·怒风的主页 伊利丹·怒风 | 初学一级 | 园豆:175
提问于:2016-09-29 15:05
< >
分享
最佳答案
0

在where 子句中使用参数,不一定会导致全表扫描,是否进行全表扫描,跟使用参数没有关系。

虽然SQL在运行时解析局部变量,但是在SQL Server第一次运行查询语句时,会根据变量的值创建执行计划,该执行计划可以复用,下次再次运行时,就会复用该执行计划。

还有,数据库维护统计信息,一旦统计信息变化很大,SQL server会重新编译执行计划。

收获园豆:10
悦光阴 | 老鸟四级 |园豆:2251 | 2016-09-29 15:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册