Day 15 - Pro: Indexes, Partitioning & Query Optimization
Bối cảnh: Hệ thống E-commerce (Thương mại điện tử)
1. User management
User management: Quản lý người dùng và vai trò (roles) trong hệ thống database.
Ví dụ: Tạo người dùng mới và gán quyền:
CREATE USER analyst WITH PASSWORD 'securepassword'; GRANT SELECT ON orders TO analyst;
Câu lệnh này tạo người dùng analyst và cấp quyền đọc (SELECT) trên bảng orders.
2. CREATE USER | ROLE
CREATE USER: Tạo người dùng mới.
CREATE ROLE: Tạo vai trò mới để quản lý quyền.
Ví dụ:
CREATE ROLE data_analyst; GRANT SELECT, INSERT ON products TO data_analyst;
Câu lệnh này tạo vai trò data_analyst và cấp quyền đọc (SELECT) và thêm (INSERT) trên bảng products.
3. GRANT & REVOKE privileges
GRANT: Cấp quyền cho người dùng hoặc vai trò.
REVOKE: Thu hồi quyền từ người dùng hoặc vai trò.
Ví dụ:
GRANT UPDATE ON customers TO data_analyst; REVOKE INSERT ON products FROM data_analyst;
Câu lệnh này cấp quyền cập nhật (UPDATE) trên bảng customers và thu hồi quyền thêm (INSERT) trên bảng products từ vai trò data_analyst.
4. Privileges - Hands-on
Thực hành cấp và thu hồi quyền:
-- Cấp quyền đọc và cập nhật trên bảng orders GRANT SELECT, UPDATE ON orders TO analyst; -- Thu hồi quyền cập nhật trên bảng orders REVOKE UPDATE ON orders FROM analyst;
5. Challenge: Privileges
- Yêu cầu: Tạo vai trò inventory_manager và cấp quyền đọc, thêm, cập nhật trên bảng inventory.
6. Solution: Privileges
Giải pháp:
CREATE ROLE inventory_manager; GRANT SELECT, INSERT, UPDATE ON inventory TO inventory_manager;
7. What are indexes?
Indexes: Cấu trúc dữ liệu giúp tăng tốc độ truy vấn bằng cách giảm số lượng hàng cần quét.
Ví dụ: Tạo index trên cột product_name trong bảng products:
CREATE INDEX idx_product_name ON products(product_name);
8. B-Tree index
B-Tree index: Loại index phổ biến, phù hợp cho các truy vấn so sánh và sắp xếp.
Ví dụ: Tạo B-Tree index trên cột order_date trong bảng orders:
CREATE INDEX idx_order_date ON orders(order_date);
9. Bitmap index
Bitmap index: Phù hợp cho các cột có giá trị phân biệt thấp (ví dụ: giới tính, trạng thái).
Ví dụ: Tạo bitmap index trên cột payment_method trong bảng orders:
CREATE BITMAP INDEX idx_payment_method ON orders(payment_method);
10. Indexes - Guidelines
Khi nào sử dụng index:
Cột thường xuyên được sử dụng trong điều kiện WHERE, JOIN, ORDER BY.
Cột có giá trị duy nhất hoặc phân biệt cao.
Khi không sử dụng index:
Cột ít được sử dụng trong truy vấn.
Bảng có kích thước nhỏ.
11. Creating indexes
Tạo index:
CREATE INDEX idx_customer_name ON customers(customer_name);
Xóa index:
DROP INDEX idx_customer_name;
12. Execution plan & query performance
Execution plan: Kế hoạch thực thi truy vấn, giúp phân tích hiệu suất truy vấn.
Ví dụ: Xem execution plan của một truy vấn:
EXPLAIN ANALYZE SELECT * FROM orders WHERE total_amount > 100;
Kết quả trả về thông tin về cách database thực thi truy vấn, bao gồm số hàng quét và thời gian thực thi.
13. Partitioning
Partitioning: Chia bảng thành các phần nhỏ hơn để cải thiện hiệu suất truy vấn và quản lý dữ liệu.
Ví dụ: Phân vùng bảng orders theo tháng:
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, total_amount DECIMAL ) PARTITION BY RANGE (order_date); CREATE TABLE orders_2023_01 PARTITION OF orders FOR VALUES FROM ('2023-01-01') TO ('2023-02-01'); CREATE TABLE orders_2023_02 PARTITION OF orders FOR VALUES FROM ('2023-02-01') TO ('2023-03-01');
14. Today's slides
Tổng kết lại các kiến thức về Indexes, Partitioning, và Query Optimization.
Slide tham khảo cung cấp ví dụ chi tiết và ứng dụng trong hệ thống E-commerce.
15. Today's summary
Hôm nay, bạn đã học:
Cách quản lý người dùng và quyền trong database.
Cách tạo và sử dụng Indexes để tối ưu hóa truy vấn.
Cách sử dụng Partitioning để cải thiện hiệu suất và quản lý dữ liệu.
Cách phân tích Execution Plan để tối ưu hóa truy vấn.
Hẹn gặp lại bạn vào Extra Day với chủ đề CTEs (Common Table Expressions)!
16. Today's challenges
Thử thách 1: Tạo index trên cột category trong bảng products và phân tích hiệu suất truy vấn.
Thử thách 2: Phân vùng bảng orders theo năm và tháng.
Thử thách 3: Phân tích execution plan của truy vấn tìm khách hàng có tổng giá trị đơn hàng lớn hơn 500.