select a.Name from rat. Assessment a where a.AssessmentId = '3'
select a.Name from rat. Assessment a where a.AssessmentId = 3
最新的差異表現明智嗎? 第一個是慢嗎?sql - 這兩個查詢有什麼區別?
我怎麼知道sql服務器是否鑄造了列或值來匹配列類型或值類型?
我看到了執行計劃。不能理解太多。
select a.Name from rat. Assessment a where a.AssessmentId = '3'
select a.Name from rat. Assessment a where a.AssessmentId = 3
最新的差異表現明智嗎? 第一個是慢嗎?sql - 這兩個查詢有什麼區別?
我怎麼知道sql服務器是否鑄造了列或值來匹配列類型或值類型?
我看到了執行計劃。不能理解太多。
第一個需要類型轉換(假設AssessmentID是一個數字數據類型),它具有性能開銷。在這種情況下,它可以忽略不計,但在更復雜的查詢中可能會有性能差異。在某些情況下,如果需要進行類型轉換,MySQL不能有效地使用索引。
儘管這兩種方法都可以使用,但如果AssessmentID
的數據類型是數字型,第二個查詢會更快,因爲沒有必要的轉換,而第一個查詢需要服務器先將值轉換爲數字。
這並不容易說不知道你使用了哪個數據庫,涉及的類型是什麼。
許多數據庫試圖將常量類型轉換/轉換爲列類型一次,因此當它們從磁盤讀取每行時不需要執行此操作。但是,當它發生時,並不能保證會發生這種情況。
但並非每個數據庫都試圖匹配類型。所以對於他們中的一些人,你會得到一個錯誤,或者你不會得到任何結果(因爲一個數字不是一個字符串,所以查詢並不真正匹配任何東西)。
這是sql server 2008 express。它會嘗試強制轉換嗎? –
@bilalfazlani:我沒有使用微軟產品。 –
試試吧。比較查詢計劃。一個假定第一個工作更多(將字符串轉換爲數字)。 – Oded
你自己的測試提示什麼? – Craig
它取決於SQL的實現。但我猜想任何SQL編譯器都會爲此創建相同的表達式樹。 –