Để truy xuất nhiều hàng theo danh sách ID nhanh chóng, hãy kết hợp **index trên cột lọc** và mệnh đề IN (..., ...). MySQL sẽ dùng index để tìm từng giá trị (index range scan / ref access) thay vì quét toàn bảng.
Ví dụ minh họa
Tạo bảng có khóa chính (tự động index):
mysql> CREATE TABLE DemoTable1501 (
-> Id INT NOT NULL PRIMARY KEY,
-> URL TEXT
-> );
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1501 VALUES
-> (101, 'www.facebook.com'),
-> (110, 'www.google.com'),
-> (220, 'www.gmail.com'),
-> (350, 'www.youtube.com');
Truy vấn 3 ID cụ thể:
mysql> SELECT * FROM DemoTable1501 WHERE Id IN (101, 220, 350);
Kết quả (3/4 hàng):
+-----+------------------+ | Id | URL | +-----+------------------+ | 101 | www.facebook.com | | 220 | www.gmail.com | | 350 | www.youtube.com | +-----+------------------+
Chứng minh dùng Index: SHOW STATUS
mysql> SHOW STATUS LIKE 'Handler_%';
Kết quả quan trọng:
+-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Handler_read_key | 3 | -- 3 lần đọc qua index (3 ID) | Handler_read_next | 0 | | Handler_read_rnd | 0 | +-------------------+-------+
Handler_read_key = 3 chứng tỏ MySQL dùng index (PRIMARY KEY) để tìm chính xác 3 giá trị, **không quét toàn bảng**.
Best practice
- Dùng
IN (val1, val2, ...)thay cho nhiềuOR– optimizer xử lý tốt hơn. - Giới hạn số lượng giá trị trong IN (khuyên < 1000) để tránh làm chậm optimizer.
- Với danh sách lớn, cân nhắc
JOINvới bảng tạm hoặcVALUES ROW()(MySQL 8.0+).