2012-11-07 49 views
-1
select a.Name from rat. Assessment a where a.AssessmentId = '3' 
select a.Name from rat. Assessment a where a.AssessmentId = 3 

最新的差異表現明智嗎? 第一個是慢嗎?sql - 這兩個查詢有什麼區別?

我怎麼知道sql服務器是否鑄造了列或值來匹配列類型或值類型?

我看到了執行計劃。不能理解太多。

+1

試試吧。比較查詢計劃。一個假定第一個工作更多(將字符串轉換爲數字)。 – Oded

+0

你自己的測試提示什麼? – Craig

+0

它取決於SQL的實現。但我猜想任何SQL編譯器都會爲此創建相同的表達式樹。 –

回答

1

第一個需要類型轉換(假設AssessmentID是一個數字數據類型),它具有性能開銷。在這種情況下,它可以忽略不計,但在更復雜的查詢中可能會有性能差異。在某些情況下,如果需要進行類型轉換,MySQL不能有效地使用索引。

1

儘管這兩種方法都可以使用,但如果AssessmentID的數據類型是數字型,第二個查詢會更快,因爲沒有必要的轉換,而第一個查詢需要服務器先將值轉換爲數字。

2

這並不容易說不知道你使用了哪個數據庫,涉及的類型是什麼。

許多數據庫試圖將常量類型轉換/轉換爲列類型一次,因此當它們從磁盤讀取每行時不需要執行此操作。但是,當它發生時,並不能保證會發生這種情況。

但並非每個數據庫都試圖匹配類型。所以對於他們中的一些人,你會得到一個錯誤,或者你不會得到任何結果(因爲一個數字不是一個字符串,所以查詢並不真正匹配任何東西)。

+0

這是sql server 2008 express。它會嘗試強制轉換嗎? –

+0

@bilalfazlani:我沒有使用微軟產品。 –