Tóm tắt SQL nâng cao — Ràng buộc, thiết kế và tinh chỉnh trong một cái nhìn
Tóm tắt loạt bài SQL nâng cao. Tham chiếu chéo UPDATE/DELETE và UPSERT nâng cao, ràng buộc và khóa ngoại, type affinity và STRICT, chuẩn hóa và view, cùng thiết kế chỉ mục và tinh chỉnh bắt đầu từ EXPLAIN QUERY PLAN — kèm sơ đồ và danh mục bài viết.
Bức tranh toàn cảnh những gì bạn đã học trong SQL nâng cao
Trang này gom loạt bài SQL nâng cao về một trang duy nhất, nhìn qua ba lăng kính: ràng buộc và thiết kế giữ dữ liệu an toàn, một schema đúng và dễ đọc, và chỉ mục cùng tinh chỉnh để truy vấn nhanh.
Sau khi nắm cú pháp ở phần Cơ bản và tổng hợp, JOIN, window function ở loạt Trung cấp, phần Nâng cao xoay quanh giữ cho dữ liệu đúng và làm nó chạy nhanh — thiết kế và tinh chỉnh.
Dùng các liên kết tới bất kỳ bài nào để quay lại ôn tập bất cứ lúc nào.
Giữ cho dữ liệu đúng — ghi nâng cao, ràng buộc, khóa ngoại, kiểu dữ liệu, thiết kế
Chúng ta đã đi qua UPDATE / DELETE và UPSERT nâng cao với truy vấn con và JOIN, ràng buộc cột và khóa ngoại, type affinity và STRICT, rồi tới chuẩn hóa, view và thực hành thiết kế.
Sơ đồ dưới đây gom nhóm DML nâng cao với ràng buộc/kiểu dữ liệu, và gom thiết kế/view lại với nhau.
| Phân loại | Bài viết | Bạn học được gì |
|---|---|---|
| Ghi nâng cao | UPDATE / DELETE với truy vấn con và JOIN | Cập nhật tương quan, UPDATE … FROM, DELETE với điều kiện truy vấn con |
| Ghi nâng cao | UPSERT (ON CONFLICT) và các ứng dụng bulk INSERT | INSERT … ON CONFLICT DO UPDATE, excluded, bulk INSERT |
| Ràng buộc | Ràng buộc cột — NOT NULL / UNIQUE / CHECK / PRIMARY KEY | NOT NULL / UNIQUE / CHECK / PRIMARY KEY và các vi phạm |
| Khóa ngoại | Ràng buộc khóa ngoại và hành động tham chiếu | REFERENCES, ON DELETE / UPDATE, foreign_keys=ON |
| Đổi ràng buộc | Thêm/đổi ràng buộc và định nghĩa lại bảng | Bổ sung ràng buộc về sau, quy trình dựng lại bảng |
| Kiểu dữ liệu | Chuỗi, số, boolean và chuyển đổi kiểu ngầm định | Type affinity, chuyển đổi ngầm định, so với kiểu nghiêm ngặt |
| Kiểu dữ liệu | Kiểu Date/Time và bảng STRICT | Lưu và so sánh date/time, bảng STRICT |
| Thiết kế | Thiết kế bảng và chuẩn hóa | 1NF tới 3NF, loại bỏ cột lặp, schema 3 tầng |
| Thiết kế | View (VIEW) | CREATE VIEW, dùng view, view có thể cập nhật |
Làm truy vấn chạy nhanh — kế hoạch thực thi, chỉ mục, tinh chỉnh
Đọc kế hoạch với EXPLAIN QUERY PLAN, hiểu thống kê, bộ tối ưu và các thuật toán join, nắm được thiết kế chỉ mục, index-only scan, đánh chỉ mục cho sắp xếp và nhóm, các mẫu mà chỉ mục không phát huy tác dụng, rồi kết thúc với việc viết lại truy vấn.
Bảng dưới đây sắp xếp từng bài viết.
| Phân loại | Bài viết | Bạn học được gì |
|---|---|---|
| Kế hoạch thực thi | Đọc kế hoạch thực thi | Từ vựng: SCAN / SEARCH / USE TEMP B-TREE và nhiều hơn |
| Thống kê | Thống kê và bộ tối ưu | ANALYZE, sqlite_stat1, độ chọn lọc và thay đổi kế hoạch |
| Join | Thuật toán Join và Thứ tự Join | Nested loop, thứ tự join, chỉ mục tự động |
| Chỉ mục | Chỉ mục — Composite, Partial, Expression, UNIQUE | Chỉ mục composite, partial, expression, UNIQUE với EXPLAIN |
| Chỉ mục | Thiết kế chỉ mục | Thứ tự cột composite, leftmost prefix, điều kiện dùng chỉ mục |
| Chỉ mục | Index-Only Scan | Index-only scan, USING COVERING INDEX |
| Chỉ mục | Đánh chỉ mục ORDER BY / GROUP BY | Tránh USE TEMP B-TREE, đánh chỉ mục cho sắp xếp và nhóm |
| Chỉ mục | Khi chỉ mục không hoạt động | Hàm trên cột, ép kiểu ngầm, LIKE, OR, và cách sửa bằng chỉ mục expression/partial |
| Viết lại | Viết lại truy vấn ① IN / EXISTS và khử tương quan | IN vs EXISTS, khử tương quan, semi-join / anti-join |
| Viết lại | Viết lại truy vấn ② loại bỏ công việc lặp, ví dụ thực hành | Loại bỏ công việc lặp, tối ưu truy vấn con với ví dụ |
Làm tốt lắm!
Đến giờ bạn đã gom lại UPDATE / DELETE và UPSERT nâng cao, mặt thiết kế với ràng buộc, khóa ngoại, kiểu dữ liệu, chuẩn hóa và view, cùng mặt tinh chỉnh với thiết kế chỉ mục và hơn thế, bắt đầu từ EXPLAIN QUERY PLAN.
Đây cũng đánh dấu việc hoàn thành cả ba cấp của khóa học SQL — Cơ bản, Trung cấp và Nâng cao.
Làm tốt lắm khi đi tới cuối chặng đường.
Hãy quay lại bất kỳ bài nào đã thu hút bạn và tiếp tục thử nghiệm với dữ liệu của riêng mình.