2012-06-06 118 views
0

我想知道下面两个查询之间是否有任何性能差异。类似WHERE子句的性能比较

查询1:

Select 
     personName 
From tbl 
Where personName = 'Asif' 

QUERY2:

Select 
     personName 
From tbl 
Where personName = 'Muhammad Asif' 

的PERSONNAME字段不是在索引。 我只是想知道,当我们搜索一个有空格的字符串时,sql引擎需要更多的努力/时间来执行查询,或者它的行为与没有空格相同。

矮个子:

  1. 如果字符串就像一个没有空间,但短期像阿西夫或字母Q1234
  2. 如果字符串包含像“穆罕默德阿西夫”
  3. 如果字符串包含空格,并且其位位长的很像“我的名字是'

sql engine对这些搜索条件会有什么影响?

+3

当你分析每一个时会发生什么?为什么空间会很重要?除了作为字符串中的附加字符之外,它们没有特别的意义。对于你想要搜索的字段进行适当的索引将比字符串大小对你的性能产生更积极的影响。 –

+1

您应该在ms sql server中打开两个查询,然后在两者上执行显示预计执行计划,然后比较估计的I/O,CPU和操作员成本,以更好地了解发生的情况。这可以用于任何SQL查询。数据库访问路径是特定于每个特定数据库的。也就是说,这两个查询之间唯一不同的是被查询字符串的长度,这很可能不会给你两者之间的性能差异。 –

+0

我不会打扰估计。你从实际获得更多信息。 –

回答

0

如果您正在寻找Muhammad Asif,您的第一个查询将不会返回该记录。如果你在where子句中使用平等,它只会返回完全匹配。

,如果你希望找到记录,包括姓名“阿西”,你可以使用

WHERE PERSONNAME LIKE“%阿西夫%”,这将返回两个阿西夫和穆罕默德·阿西夫和包含阿西夫任何其他记录。然而,LIKE是一个相当耗费资源的查询

+0

嗯,这取决于 - 如果你使用'LIKE'Asif%'''那么SQL Server的查询优化器可能仍然使用索引(如果该列上有一个索引)。但是,如果你使用'LIKE'%asif%''那么你从来没有**会有一个索引被使用,因此查询会很慢(基本上是一个全表扫描) –