首页 新闻 搜索 专区 学院

关于 sql 参数化查询比拼接sql慢很多

0
悬赏园豆:20 [已解决问题] 解决于 2015-11-13 11:13

 我有个sql语句,是按照时间查询  WHERE CreateDate >=@beginTime AND CreateDate <=@endTime, CreateDate 字段是加索引的, beginTime 值为 2015-01-01 00:00:00,endTime 值为2015-10-28 00:00:01

SqlParameter[] paras = 
            {
                 new SqlParameter("@beginTime", DbType.DateTime){SqlValue = beginTime.ToDateTime()},
                 new SqlParameter("@endTime", DbType.DateTime){SqlValue = endTime.ToDateTime()},
            };

ToDateTime 是转换成DateTime类型的。
如果把参数化了,使用拼接语句,20多万数据,时间在2秒左右,但参数化查询却会超时,不知我参数化哪里有问题

xmj112288的主页 xmj112288 | 初学一级 | 园豆:126
提问于:2015-10-27 17:53
< >
分享
最佳答案
0

使用sqlserver 自带工具 "sql server profiler" 工具查看下真正执行的语句是什么。

(点击 "工具"  -》 sql server profiler选项)

排除程序或者代码的原因.进一步去解决问题。

Mountains | 菜鸟二级 |园豆:241 | 2015-10-27 23:16
其他回答(3)
0

用sql监视器看具体执行的sql语句,然后直接在sql管理器里执行看看结果.

收获园豆:20
吴瑞祥 | 园豆:29185 (高人七级) | 2015-10-27 18:09
0

你代码写错了,应该是这样子写的:

            SqlParameter[] paras = 
            {
                 new SqlParameter("@beginTime",endTime.ToDateTime()),
                 new SqlParameter("@endTime", beginTime.ToDateTime())
            };

你还多此一举,换蛇添足。当然会错了

田麦成 | 园豆:2004 (老鸟四级) | 2015-10-28 08:59

 你这种写法在某些情况下会出问题的

支持(0) 反对(0) xmj112288 | 园豆:126 (初学一级) | 2015-10-28 09:27

ni这么些,会有Bug 的

支持(0) 反对(0) Wesleyzen | 园豆:344 (菜鸟二级) | 2015-10-28 10:40

指定参数类型效率更高

支持(0) 反对(0) Everglow | 园豆:161 (初学一级) | 2015-10-28 14:17
0

SqlParameter[] paras = { new SqlParameter("@beginTime", DbType.DateTime),

                                     new SqlParameter("@endTime", DbType.DateTime) };

paras[0].value=beginTime;

paras[1].value=endTime;

如果传入的时间是string类型,则转换一下

如此低调的男人 | 园豆:840 (小虾三级) | 2015-10-28 14:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册