Viết truy vấn tối ưu

Giới thiệu về Redshift

Jason Myers

Principal Engineer

Giới hạn cột

  • Tránh SELECT *
  • Không chọn cột không cần trong kết quả
    • Lưu ý Redshift là dạng cột và tải dữ liệu theo cột
Giới thiệu về Redshift

Dùng DISTKEY và SORTKEY

Dùng trong các mệnh đề sau khi có thể

  • JOIN
  • WHERE
  • GROUP BY

 

Dùng SORTKEY theo thứ tự trong ORDER BY

  • Tối ưu cao: sortkey_1, sortkey_2, sortkey_3
  • Không tối ưu: sort_key_1, sort_key_3

Truy vấn phân tán

Giới thiệu về Redshift

Xây dựng predicate tốt

  • Dùng DISTKEYSORTKEY
  • Gần với điều kiện JOIN của bảng
  • Tránh dùng hàm trong các điều kiện này
SELECT receipts.cookie_id, 
       sum(receipts.total)
FROM receipts
JOIN cookies ON receipts.cookie_id = cookies.cookie_id
  -- Keep cookies predicates in the join to push down to nodes holding the records for cookies
 AND cookies.available_on < '2023-11-14'
 AND cookies.end_of_sale IS null
-- Predicates that are not part of the join or on the joined table stay in the WHERE clause
WHERE receipts.order_time > '2023-11-13'
GROUP BY 1 ORDER BY 1;
Giới thiệu về Redshift

Nhất quán thứ tự cột

Khi dùng:

  • GROUP BY
  • ORDER BY

Chưa tốt

GROUP BY col_one, col_two, col_three
ORDER BY col_two, col_three, col_one

Tốt

GROUP BY col_two, col_three, col_one
ORDER BY col_two, col_three, col_one
Giới thiệu về Redshift

Dùng subquery hợp lý

  • Dùng chiến lược JOIN phù hợp thay vì chỉ dùng subquery
  • Dùng EXISTS trong điều kiện khi chỉ cần kiểm tra subquery có kết quả
    SELECT column_name
    FROM table_name
    WHERE EXISTS
      (SELECT column_name 
       FROM table_name 
       WHERE active is True);
    
  • Nếu tái dùng subquery, dùng CTE để tận dụng bộ nhớ đệm
Giới thiệu về Redshift

Ayo berlatih!

Giới thiệu về Redshift

Preparing Video For Download...