Nếu bạn muốn tận dụng LIMIT
để cải thiện hiệu suất, bạn cần
- hiểu dữ liệu bạn đang truy xuất
- lập chỉ mục đúng các chuỗi chính xác
- chịu trách nhiệm tái cấu trúc truy vấn
- sử dụng
LIMIT
trướcJOIN
Những nguyên tắc này có thể đi một chặng đường dài nếu bạn có thể sắp xếp chúng.
Tôi đã học được những khái niệm này bằng cách xem Video YouTube này (lắng nghe cẩn thận qua giọng Pháp)
Tôi đã sử dụng các khái niệm đó để trả lời một câu hỏi StackOverflow rất khó khăn về việc nhận 40 bài viết hàng đầu từ một số bảng: ngày 12 tháng 5 năm 2011: Tìm nạp một hàng từ Bảng tham gia .
Trong câu trả lời của tôi cho câu hỏi đó (ngày 16 tháng 5 năm 2011) , tôi đã viết truy vấn sau đây và kiểm tra nó kỹ lưỡng:
SELECT
AAA.author_id,
AAA.date_created,
IFNULL(BBB.title,'<NO_TITLE>') title,
IFNULL(CCC.filename,'<NO-IMAGE>') filename,
IFNULL(CCC.date_added,'<NO-IMAGE-DATE>') image_date
FROM
(
SELECT
AA.id,
AA.date_added,
BB.author_id,
BB.date_created
FROM
(
SELECT
A.id,IFNULL(MAX(B.date_added),'1900-01-01 00:00:00') date_added
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
LEFT JOIN article_images B ON A.id = B.article_id
GROUP BY A.id
) AA
INNER JOIN articles BB USING (id)
) AAA
LEFT JOIN article_contents BBB ON AAA.id=BBB.article_id
LEFT JOIN article_images CCC
ON (AAA.id=CCC.article_id AND AAA.date_added=CCC.date_added)
ORDER BY AAA.date_created DESC;
Vui lòng chú ý dòng trong truy vấn với LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Truy vấn này được chôn sâu ba cấp độ. Điều này cho phép tôi có được 40 bài viết cuối cùng bằng cách sử dụng LIMIT
. Sau đó, tôi đã thực hiện các THAM GIA cần thiết sau đó.
BÀI HỌC
- Thực hiện
LIMIT
bên trong các truy vấn con có thể không phải lúc nào cũng là câu trả lời vì tính chính xác của các chỉ mục, nội dung dữ liệu và kích thước tập kết quả từ LIMIT
. Nếu bạn có tất cả "vịt liên tiếp" (Có bốn nguyên tắc trong truy vấn của bạn), bạn có thể nhận được kết quả tốt đáng ngạc nhiên.
- Làm cho các truy vấn của bạn đơn giản nhất có thể khi thực hiện
LIMIT
bằng cách chỉ thu thập các khóa.
LIMIT
giúp cải thiện hiệu quả: Tối ưu hóa các câu hỏi