我有一个C#程序,它从数据库中检索多行,但目前在同一个连接上一次执行一行。
编写它是否更好,而不是重复运行(每次更改blah):
select data from table where name = 'blah'
类似于:
select name, data from table where name in ('blah','blah2','blah3')
我对进行此更改感到紧张,因为我不确定从结果表中检索此数据的额外开销。
请注意,示例数据并不代表实际数据,所以我不能做任何事情:
select name, data from table where name like 'blah%'
此外,这是一个高度紧张的环境,所以即使是最轻微的改善也可能是非常有益的。
提前致谢, 汤姆
答案 0 :(得分:2)
我会选择一个粗短的请求。至少从性能的角度来看,这是更好的方法。
答案 1 :(得分:2)
一次访问数据库比多次小命中更有效。
答案 2 :(得分:2)
我希望使用单个语句来产生更好的性能,并且您将减少与语句准备,提交和执行相关的开销。但是,与任何优化一样 - 您应该尝试并在提交之前对其进行测量。
您可能还想查看准备和提交一批语句,而不是单独提出请求。此外,对于第一种情况,请检查您是否正在准备语句一次并缓存预准备语句 - 从而节省了重复编译语句的开销。
答案 3 :(得分:2)
理论上,单个查询更好。即使数据库中的处理时间相同,也可以避免数据库服务器和客户端之间的多次往返通信,从而节省资源和时间。
也就是说,这是一种需要进行性能分析以实际衡量所做任何更改的改进的问题。
答案 4 :(得分:1)
参数化查询既快又安全。它缓存查询计划并防范SQL injection。
SELECT name, data
FROM table
WHERE name in (@name1, @name2, @name3)
在调用代码中,您可以根据需要添加参数。例如(C#):
var command = connection.CreateCommand();
command.CommandText = "SELECT name, data FROM table WHERE name in (";
int index = 0;
string separator = "";
foreach (string value in valueList)
{
string paramName = "@p" + Convert.ToString(index);
command.CommandText += separator + paramName;
command.Parameters.Add(paramName, value);
separator = ", ";
index++;
}
command.CommandText += ")";
答案 5 :(得分:0)
我要去做一个叫
的操作select data from table... etc.etc.
通过存储过程:然后,您可以修改SQL逻辑(可能的优化),而无需更改前端代码中的任何内容。
答案 6 :(得分:0)
一个陈述是最好的,并通过数据库优化..