You are on page 1of 2

Phân mảnh (Partitioning)

1. Phân mảnh bảng customer dựa vào cột address_id sử dụng kiểu phân mảnh hash.
Kiểm tra kết quả phân mảnh đối với truy vấn sử dụng lệnh EXPLAIN PARTITIONS SELECT

ALTER TABLE customer PARTITION BY HASH(address_id) PARTITIONS 4;


EXPLAIN PARTITIONS SELECT * FROM customer WHERE address_id = 5;

2. Phân mảnh bảng rental dựa vào cột rental_date theo khoảng năm cho thuê.
a. Thêm phân vùng mới cho năm 2007.
b. Thêm dữ liệu thuê film năm 2007. Kiểm tra truy vấn năm 2007 sử dụng lệnh EXPLAIN
PARTITIONS SELECT

a.
ALTER TABLE rental PARTITION BY RANGE (YEAR(rental_date)) (
PARTITION p0 VALUES LESS THAN (2005),
PARTITION p1 VALUES LESS THAN (2006),
PARTITION p2 VALUES LESS THAN (2007),
PARTITION p3 VALUES LESS THAN (2008),
PARTITION p4 VALUES LESS THAN MAXVALUE
);

b.
INSERT INTO rental (rental_date, inventory_id, customer_id, staff_id)
VALUES ('2007-05-06', 1, 1, 1);

EXPLAIN PARTITIONS SELECT * FROM rental WHERE YEAR(rental_date) = 2007;

Indexing
3. Thực hiện truy vấn tìm các diễn viên có last_name bắt đầu bằng chữ ‘N’, xem cách
thực hiện truy vấn trên bằng câu lệnh EXPLAIN SELECT. Thực hiện truy vấn, thay
bằng last_name chứa ký tự ‘N’.
4. Thực hiện truy vấn liệt kê các film được thuê trong tháng 2 năm 2006 xem có sử
dụng index trên cột rental_date.
5. Đưa ra danh sách cửa hàng và tổng số film được thuê của mỗi cửa hàng trong tháng
2/2006, danh sách sắp xếp theo thứ tự số lượng giảm dần theo 2 cách nối bảng và
truy vấn con. Xem MySQL thực hiện 2 cách có giống nhau.```sql
EXPLAIN SELECT * FROM actor WHERE last_name LIKE 'N%';

3.
EXPLAIN SELECT * FROM actor WHERE last_name LIKE '%N%';

4.
EXPLAIN SELECT * FROM rental WHERE rental_date BETWEEN '2006-02-01' AND '2006-02-
28';

5.

C1: Nối bảng


EXPLAIN SELECT store.store_id, COUNT(rental.rental_id) as total_rentals
FROM store
JOIN staff ON store.store_id = staff.store_id
JOIN rental ON staff.staff_id = rental.staff_id
WHERE rental.rental_date BETWEEN '2006-02-01' AND '2006-02-28'
GROUP BY store.store_id
ORDER BY total_rentals DESC;
C2: Truy vấn con
EXPLAIN SELECT store.store_id, (
SELECT COUNT(rental.rental_id)
FROM rental
JOIN staff ON rental.staff_id = staff.staff_id
WHERE staff.store_id = store.store_id AND rental.rental_date BETWEEN '2006-02-
01' AND '2006-02-28'
) AS total_rentals
FROM store
ORDER BY total_rentals DESC;

You might also like