参数化查询速度慢

好累,加班到现在,但是其实你的负责的工作都已经做完了。可是还需要配合别人,只能等!!!  现在已经凌晨了。。。

工作分配不够好?个人不负责?时间规划不好?

不知道!!!

说入正题,这是问题原型:

SQL 慢的:
select * from MyTable where InputTime>‘2015-05-09‘
SQL 快的:
Declare @t datetime
set @t=‘2015-05-09‘
select * from  MyTable  where InputTime>@t

第二条比第一条执行的速度快很多!!!

其实我查询了好长时间的资料没查出来什么原因?(连重现都重现不了,是之前记下的问题,引以为戒,每次发现问题需要具体记下来。。。忙了这么就一点收获都没有

我只想说我以后要用第二种。。。哪位大牛帮帮忙

PS:另外在每次使用SqlParameter时,如果是字符类型的,都尽量加上size,涉及到执行计划缓存的问题

例如:new SqlParameter("@name", SqlDbType.Varchar, 40) { Value = name };

反正还是不能下班。。。

我又查了一下:好像微软官方也出现过这样的问题

给出的解决方案是这样的:The
only resolution to this problem is to use a stored querydef query instead of prepared queries.

也许可以这么理解:

将上面的参数化改为这样:exec(‘resolution
select * from MyTable where InputTime >‘‘‘+@t+‘‘‘‘)

暂且就这样吧!主要是现在不能重现,无法验证,如果遇到了,这样先试一下咯

时间: 2024-10-25 00:04:46

参数化查询速度慢的相关文章

参数化查询速度慢的原因及分析

测试环境:sql2005 + .NET2.0 同样的SQL语句,参数化查询和SQL语句直接执行的速度对比.数据库中存放的字段类型是varchar 结论: 1.对参数要设置正确的 DbType(varchar = AnsiString, nvarchar=String,char=AnsiStringFixedLength,nchar=StringFixedLength) 2.尽量使用数据库类型对应的DbType的. 3.尽量给参数的size设置大小 Code: class Program { pr

参数化查询比拼接字符串慢的原因

我们都知道,参数化查询可以处理SQL注入,以及提高查询的效率,因为参数化查询会使MSSQL缓存查询的计划. 但是现在我发现一个奇怪的问题,就是参数化查询比字符串拼接要慢,而且速度相差10倍之多. SQL语句是: select * from T_Message where T_Message.BelongTo=@BelongTo 开始在ADO.NET中用SqlParameter传递参数@BelongTo时是这么写的 SqlParameter param1 = new SqlParameter("@

【转】浅析Sql Server参数化查询

转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/21/2460978.html 错误认识1.不需要防止sql注入的地方无需参数化 参数化查询就是为了防止SQL注入用的,其它还有什么用途不知道.也不关心,原则上是能不用参数就不用参数,为啥?多麻烦,我只是做公司内部系统不用担心SQL注入风险,使用参数化查询不是给自己找麻烦,简简单单拼SQL,万事OK 错误认识2.参数化查询时是否指定参数类型.参数长度没什么区别 以前也一直都觉的加与不加参数长

Sql Server参数化查询之where in和like实现详解

来自:http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html#wherein 文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where in 参数化 使用临时表实现where in 参数化 like参数化查询 xml和DataTable传参  身为一名小小的程序猿,在日常开发中不可以

使用dapper进行参数化查询

在使用Dapper操作Mysql数据库中我介绍了使用dapper进行CURD基本操作,但在示例代码中参数虽然也是通过@开头,但其实不是真正意义的参数化查询,而是拼接sql,这种方式不利于防止sql注入,所以在Dappe中可以使用DynamicParameters动态参数集合添加参数,从而实现dapper下的参数化查询: 示例代码 using (var connection = new MySqlConnection(connstr)) { //声明动态参数 DynamicParameters P

数据提高查询速度的方法(摘抄)

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

.NET 出现参数化查询 需要参数但未提供该参数的错误

1.问题的来源 在.NET或者C#中,我们一般执行sql语句的话,推荐使用参数化查询,这样可以避免sql注入的攻击,但是,我在使用参数化查询的时候 出现了以下的错误,详细如下图: 图一这是写sql语句参数化查询的代码 图2 这是MSSQL执行的sql语句 2.问题的原因   出现这种错误的原因在于,在参数化查询的时候,有几个参数的值为null,这样的话,就出现了如图2所示的错误. 为啥会这样了?? 虽然参数的值就是为null,传入数据库中就必须变成DbNull.Value因为此null为c#的,

ADO.NET 参数化查询

使用参数化查询的情景有很多,但最常用的情景是需要用户在查询中进行输入的情况. 有两种方法可供使用.第一,可以讲用户输入嵌入到查询字符串中,例如可能使用.NET Framework中的String.Format函数. 第二种方法是构造一种参数化查询.      在开始时执行如下所示的基本查询: 1 select count(*) from UserInfo 2 3 4 where UserName=‘{0}’ and PassWord=‘{1}’      然后利用用户的输入构造如下查询: 1 s

mysql 查询性能优化第一章 为什么查询速度会慢

一 为什么查询速度会慢 在尝试编写快速的查询之前,咱们需要清楚一点,真正重要的是响应时间.如果把查询看成是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要有 优化查询,实际上要优化起子任务,要么消除其中一些子任务,要么减少子任务的执行次数,Mysql在执行查询的时候有哪些子任务,哪些子任务运行的速度很慢?这里还不好给出完 整的列表.一般来说,查询的生命周期大致可以按照顺序爱看:从客户端->服务器->然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中执行