Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:truy xuất một lựa chọn lớn theo từng phần

Bạn có thể thử sử dụng LIMIT tính năng. Nếu bạn làm điều này:

SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000

Bạn sẽ nhận được 1.000 hàng đầu tiên. LIMIT đầu tiên giá trị (0) xác định hàng bắt đầu trong tập kết quả. Nó được lập chỉ mục bằng 0, vì vậy 0 có nghĩa là "hàng đầu tiên". LIMIT thứ hai giá trị là số hàng tối đa để truy xuất. Để nhận được một vài bộ 1.000 tiếp theo, hãy làm như sau:

SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000
SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000

Và như thế. Khi SELECT không trả về hàng nào, bạn đã hoàn tất.

Tuy nhiên, điều này là không đủ, bởi vì bất kỳ thay đổi nào được thực hiện đối với bảng trong khi bạn đang xử lý 1K hàng của mình cùng một lúc sẽ không phù hợp với thứ tự. Để cố định kết quả trong thời gian, hãy bắt đầu bằng cách truy vấn kết quả vào một bảng tạm thời:

CREATE TEMPORARY TABLE MyChunkedResult AS (
  SELECT *
  FROM MyTable
  ORDER BY whatever
);

Lưu ý phụ:bạn nên đảm bảo rằng bảng tạm thời không tồn tại trước:

DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;

Bằng mọi giá, khi đã có bảng tạm thời, hãy kéo các phần hàng từ đó:

SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.

Tôi sẽ giao nó cho bạn để tạo logic sẽ tính toán giá trị giới hạn sau mỗi đoạn và kiểm tra kết quả cuối cùng. Tôi cũng muốn giới thiệu nhiều phần lớn hơn 1.000 bản ghi; đó chỉ là một con số tôi chọn ra.

Cuối cùng, đây là một hình thức tốt để bỏ bảng tạm thời khi bạn hoàn thành:

DROP TEMPORARY TABLE MyChunkedResult;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA chèn kết quả cha / con trong MySQLIntegrityConstraintViolationException

  2. Truy vấn Mysql với biến mysql không hoạt động trong Zend Framework 1

  3. Sử dụng utf8mb4 trong MySQL

  4. Cách tốt nhất để lưu trữ giờ làm việc và truy vấn nó một cách hiệu quả

  5. Tham chiếu khóa ngoại MySQL