- 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:
- where 篩選條件中給予值的資料型態,盡量與資料行的資料型態完全相符合,系統不會經過隱含轉換
- REF:
- SQL Server 效能調校
沒有留言:
張貼留言