我有一张桌子' 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是真的吗?
答案 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不是涡轮增压器,只能在适当的情况下使用。