2012-06-06 114 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%''那麼你從來沒有**會有一個索引被使用,因此查詢會很慢(基本上是一個全表掃描) –