Lọc với WHERE

Cải thiện hiệu năng truy vấn trong SQL Server

Dean Smith

Founder, Atamai Analytics

Cách WHERE hoạt động

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Bảng PlayerStats

Cải thiện hiệu năng truy vấn trong SQL Server

Cách WHERE hoạt động

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Bảng PlayerStats đã lọc

Cải thiện hiệu năng truy vấn trong SQL Server

Thứ tự xử lý WHERE

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE được xử lý trước SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Cải thiện hiệu năng truy vấn trong SQL Server

Dùng truy vấn con

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Bắt đầu truy vấn con tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- tạo trong truy vấn con
ORDER BY TotalRebounds DESC;
Cải thiện hiệu năng truy vấn trong SQL Server

Dùng truy vấn con

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Bắt đầu truy vấn con tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- tạo trong truy vấn con
ORDER BY TotalRebounds DESC;
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Cải thiện hiệu năng truy vấn trong SQL Server

Tính toán trên cột

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Tính toán trên cột trong điều kiện WHERE có thể làm tăng thời gian chạy truy vấn
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Cải thiện hiệu năng truy vấn trong SQL Server

Hàm trên cột

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- dùng hàm không cần thiết 
-- trên cột lọc
  • Áp dụng hàm lên cột trong điều kiện WHERE có thể làm tăng thời gian chạy truy vấn
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Cải thiện hiệu năng truy vấn trong SQL Server

Đơn giản hóa WHERE

SELECT PlayerName, College, DraftYear 
FROM Players 
        -- Không tính toán hay hàm
WHERE College like 'Georgia%'; 
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Cải thiện hiệu năng truy vấn trong SQL Server

Tóm tắt

  • WHERE được xử lý trước SELECT
  • Tính toán trên cột trong điều kiện WHERE có thể làm tăng thời gian chạy truy vấn
  • Áp dụng hàm lên cột trong điều kiện WHERE có thể làm tăng thời gian chạy truy vấn
Cải thiện hiệu năng truy vấn trong SQL Server

Vamos praticar!

Cải thiện hiệu năng truy vấn trong SQL Server

Preparing Video For Download...