sql选择条件性能

时间:2014-07-10 11:14:28

标签: sql sql-server performance

我有一张桌子' Tab'数据如:

 id |  value
---------------
 1  |  Germany
 2  |  Argentina
 3  |  Brasil
 4  |  Holland

perfomane选择哪种方式更好?

1. SELECT * FROM Tab WHERE value IN ('Argentina', 'Holland')

2. SELECT * FROM Tab WHERE id IN (2, 4)

我认为第二次选择会更快,因为int比较比字符串快。这对MS SQL是真的吗?

2 个答案:

答案 0 :(得分:3)

评论太长了。

这是一个不成熟的优化。整数和字符串之间的比较通常对查询性能的影响最小。查询性能的驱动因素更多的是表大小,查询计划,可用内存和资源竞争。

通常,在列上使用索引进行比较是个好主意。第一列看起来像主键,因此它会自动获取索引。字符串列应该有一个建立在其上的索引。通常,与在可变长度字符串列上构建的整数相比,构建在整数列上的索引将具有稍微更好的性能。但是,这种性能差异确实只会在事务级别非常高的环境中产生影响(每秒可以考虑数千次数据修改操作)。

您应该使用最适合应用程序的逻辑,并担心代码的其他方面。

答案 1 :(得分:0)

回答简单问题是选项2 SELECT * FROM Tab WHERE id IN (2, 4)会更快,因为你说比较速度更快。

加快速度的一种方法是在列中添加索引,以加快评估,过滤和结果的最终检索。

如果此表格增长得更多,您也不应该SELECT *而是SELECT id, value,否则您可能会提取的数据超出您的需求。

您还可以加速查询的购买添加WITH(NOLOCK),因为您的查询速度可能会受到同时访问表的其他会话的影响。例如SELECT * FROM Tab WITH(NOLOCK) WHERE id IN (2, 4)。如下所述,虽然添加nolock不是涡轮增压器,只能在适当的情况下使用。