Làm cách nào để chọn 5 hàng đầu tiên trong mysql?

Truy vấn Top-N là các truy vấn giới hạn kết quả ở một số hàng cụ thể. Đây thường là các truy vấn cho các mục nhập gần đây nhất hoặc "tốt nhất" của một tập hợp kết quả. Để thực hiện hiệu quả, việc xếp hạng phải được thực hiện với một

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 FETCH FIRST 10 ROWS ONLY
7 có đường dẫn

Cách đơn giản nhất để chỉ tìm nạp các hàng đầu tiên của truy vấn là tìm nạp các hàng được yêu cầu rồi đóng câu lệnh. Thật không may, trình tối ưu hóa không thể thấy trước điều đó khi chuẩn bị kế hoạch thực hiện. Để chọn kế hoạch thực hiện tốt nhất, trình tối ưu hóa phải biết liệu cuối cùng ứng dụng có tìm nạp tất cả các hàng hay không. Trong trường hợp đó, quét toàn bộ bảng với thao tác sắp xếp rõ ràng có thể hoạt động tốt nhất, mặc dù một

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 FETCH FIRST 10 ROWS ONLY
7 theo đường dẫn có thể tốt hơn khi chỉ tìm nạp mười hàng—ngay cả khi cơ sở dữ liệu phải tìm nạp từng hàng riêng lẻ. Điều đó có nghĩa là trình tối ưu hóa phải biết liệu bạn có hủy bỏ câu lệnh hay không trước khi tìm nạp tất cả các hàng để nó có thể chọn kế hoạch thực thi tốt nhất

Mẹo

Thông báo cho cơ sở dữ liệu bất cứ khi nào bạn không cần tất cả các hàng

Tiêu chuẩn SQL đã loại trừ yêu cầu này trong một thời gian dài. Phần mở rộng tương ứng [

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
1] cuối cùng đã được giới thiệu với SQL. 2008 và hiện có sẵn trong IBM DB2, PostgreSQL, SQL Server 2012 và Oracle 12c. Một mặt, điều này là do tính năng này là một tiện ích mở rộng không cốt lõi và mặt khác là do mỗi cơ sở dữ liệu đã cung cấp giải pháp độc quyền của riêng mình trong nhiều năm

Các ví dụ sau đây cho thấy việc sử dụng các tiện ích mở rộng nổi tiếng này bằng cách truy vấn mười lần bán hàng gần đây nhất. Cơ sở luôn giống nhau. tìm nạp tất cả doanh số, bắt đầu với doanh số gần đây nhất. Cú pháp top-N tương ứng chỉ hủy bỏ việc thực thi sau khi tìm nạp mười hàng

DB2

DB2 hỗ trợ cú pháp

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
1 của tiêu chuẩn ít nhất kể từ phiên bản 9 [LUW và zOS]

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 FETCH FIRST 10 ROWS ONLY

Từ khóa độc quyền

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
3 được hỗ trợ kể từ DB2 LUW 9. 7 [yêu cầu
SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
4]

mysql

MySQL và PostgreSQL sử dụng mệnh đề

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
3 để hạn chế số hàng được tìm nạp

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
Nhà tiên tri

Cơ sở dữ liệu Oracle đã giới thiệu tiện ích mở rộng

SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
1 với bản phát hành 12c. Với các bản phát hành trước đó, bạn phải sử dụng cột giả
SELECT *
  FROM sales
 ORDER BY sale_date DESC
 LIMIT 10
7 tự động đánh số các hàng trong tập hợp kết quả. Để sử dụng cột này trong bộ lọc, chúng tôi phải ngắt truy vấn

SELECT *
  FROM [
       SELECT *
         FROM sales
        ORDER BY sale_date DESC
       ]
 WHERE rownum 

Chủ Đề