Tối ưu truy vấn

Nhập môn Mô hình dữ liệu trong Snowflake

Nuno Rocha

Director of Engineering

Thứ tự thực thi truy vấn

Thứ tự thực thi truy vấn, truy vấn đầy đủ

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (1)

Thứ tự thực thi truy vấn; FROM

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (2)

Thứ tự thực thi truy vấn; JOIN

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (3)

Thứ tự thực thi truy vấn; WHERE

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (4)

Thứ tự thực thi truy vấn; TỔNG HỢP

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (5)

Thứ tự thực thi truy vấn; HAVING

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (6)

Thứ tự thực thi truy vấn; SORT

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (7)

Thứ tự thực thi truy vấn; LIMIT

Nhập môn Mô hình dữ liệu trong Snowflake

Thứ tự thực thi truy vấn (8)

Thứ tự thực thi truy vấn cuối cùng

  • THỰC HÀNH TỐT:
    • Tránh SELECT *; chỉ chọn cột cần thiết
    • Dùng LIMIT để giảm dữ liệu
    • Dùng WHERE sớm để lọc hàng, tiết kiệm bộ nhớ
    • GROUP BY cùng hàm tổng hợp trên tập dữ liệu đã thu hẹp để tối ưu xử lý
Nhập môn Mô hình dữ liệu trong Snowflake

Truy vấn con

Minh họa truy vấn con

Nhập môn Mô hình dữ liệu trong Snowflake

Truy vấn con

Mô hình dữ liệu khách sạn – chương trình thân thiết

Nhập môn Mô hình dữ liệu trong Snowflake

Truy vấn con

  • Truy vấn tất cả khách có hơn 1000 điểm thân thiết
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Nhập môn Mô hình dữ liệu trong Snowflake

Biểu thức bảng chung

CTE

Nhập môn Mô hình dữ liệu trong Snowflake

Biểu thức bảng chung

  • Truy vấn thông tin đặt phòng mới nhất
WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Nhập môn Mô hình dữ liệu trong Snowflake

CTE và truy vấn con

CTE

  • Ưu điểm

    • Dễ đọc với truy vấn phức tạp
    • Tái sử dụng trong cùng truy vấn
    • Tổ chức truy vấn SQL tốt hơn
  • Nhược điểm

    • Có thể gây overhead hiệu năng
    • Chỉ hiệu lực trong phạm vi một truy vấn

Truy vấn con

  • Ưu điểm

    • Đơn giản, trực tiếp cho trường hợp dùng một lần
    • Linh hoạt, dùng ở nhiều phần của câu lệnh SQL
  • Nhược điểm

    • Giảm tính dễ đọc khi phức tạp
    • Có thể kém hiệu năng khi lồng nhiều lớp
Nhập môn Mô hình dữ liệu trong Snowflake

Trực quan hóa thời gian thực thi truy vấn

Trang hồ sơ truy vấn

Nhập môn Mô hình dữ liệu trong Snowflake

Tổng quan thuật ngữ và chức năng

  • Tối ưu truy vấn: Tinh chỉnh truy vấn để tối đa hiệu suất
  • Truy vấn con: Truy vấn nhỏ trong truy vấn chính để tập trung dữ liệu cụ thể
  • Biểu thức bảng chung (CTE): Bảng ảo tạm thời trong khi truy vấn
  • WITH .. AS: Lệnh SQL định nghĩa CTE
  • LIMIT: Giới hạn số hàng của kết quả
  • HAVING: Lọc dữ liệu đã được tổng hợp bằng SUM, MAX, v.v.
  • WHERE: Lọc hàng trước khi nhóm, tăng hiệu quả truy vấn
Nhập môn Mô hình dữ liệu trong Snowflake

Mẫu CTE và truy vấn con

  • Truy vấn con
SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
  • CTE
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Nhập môn Mô hình dữ liệu trong Snowflake

Ayo berlatih!

Nhập môn Mô hình dữ liệu trong Snowflake

Preparing Video For Download...