2017年10月7日 星期六

[SQL] Compare Operator - where Data Conversion

  • sql 使用 where 的 Data Conversion 觀察查詢成本
    • 為依據資料行的資料型態給予值,實際 Database Engine 會先進行隱含轉換,再進行比對
  • 資料庫使用 Adventure Works for SQL Server 2012 的資料表 Production.Product
    • Step 1. 查詢
select * from Production.Product where Name = 'ML Crankarm'
select * from Production.Product where Name = N'ML Crankarm'
    • Step 2. 查詢結果
      • 查詢 1, 2:成本完全一樣
    • Step 3. 查看查詢 1, 2
      • 由於資料行 Name 的型態為 nvarchar
      • 查詢 1:Name = 'ML Crankarm' 進行比對,所以在執行時必須先進行隱含轉換 (CONVERT_IMPLICIT)
      • 查詢 2:如 Name = N'ML Crankarm',給予的值直接使用 unicode ,就不會有此轉換成本
    • Result:
      1. where 篩選條件中給予值的資料型態,盡量與資料行的資料型態完全相符合,系統不會經過隱含轉換
  • REF:
    • SQL Server 效能調校

沒有留言:

張貼留言