参数化的SQLite查询运行缓慢

时间:2010-10-29 22:05:26

标签: c# sqlite

晚安,

我有一种方法,我需要从SQLite数据库中选择通过两个字符串查询数据库获得的值。字符串被传递给方法,在方法内部我进行了一些字符串连接以构建SQLiteCommand.CommandText。令我惊讶的是,即使使用字符串连接,尽管每个人都说参数化查询比使用字符串连接更快,但是当我在方法外部参数化此查询并且仅将值分配给方法本身的参数时,它运行得慢得多( 3ms相比7 / 8ms)...我做错了还是这是正常的?

在方法之外,我有以下代码:

ComandoBD = new SQLiteCommand(@"SELECT Something FROM SomeTable WHERE (Field1 = @TextField1 AND Field2 = @TextField2)", LigacaoBD);

在方法内部我只写

ComandoBD.AddWithValue("@TextField1", StringWithValue1); ComandoBD.AddWithValue("@TextField2", StringWithValue2);

奇怪的是,这跑得更快: ComandoBD.CommandText = "SELECT Something FROM SomeTable WHERE (Field1 = '" + StringWithValue1 + "' AND TextField2 = '" + StringWithValue2 + "')";

非常感谢。

2 个答案:

答案 0 :(得分:0)

参数化查询并不比手动编码sql快。使用它们的原因是它们提供了许多与使用存储过程相同的安全性好处。不要将字符串添加到一起来制作带有文本框输入的sql ......其他开发人员会认为你的大脑很慢。

如何添加清理字符串输入所需的所有代码,然后查看它是否仍然运行得更快=)

答案 1 :(得分:0)

编译查询(参数化)肯定更快,因为它们只需要解析一次。因此,如果您执行相同的语句多次但具有不同的值,那么它将更快