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

60 triệu mục nhập, chọn mục nhập từ một tháng nhất định. Làm thế nào để tối ưu hóa cơ sở dữ liệu?

Để nhận các mục nhập trong một tháng cụ thể, trong một năm cụ thể, nhanh hơn - bạn sẽ cần lập chỉ mục time cột :

CREATE INDEX idx_time ON ENTRIES(time) USING BTREE;

Ngoài ra, hãy sử dụng:

SELECT e.* 
  FROM ENTRIES e
 WHERE e.time BETWEEN '2010-04-01' AND DATE_SUB('2010-05-01' INTERVAL 1 SECOND)

... bởi vì BETWEEN là bao gồm, vì vậy bạn sẽ nhận được bất kỳ thứ gì có ngày "2010-05-01 00:00:00" với truy vấn bạn đã đăng.

Tôi cũng muốn chọn dữ liệu từ tháng nhất định từ một DataSourceID nhất định

Bạn có thể thêm một chỉ mục riêng cho cột datasourceid:

CREATE INDEX idx_time ON ENTRIES(datasourceid) USING BTREE;

... hoặc thiết lập một chỉ mục bao trùm để bao gồm cả hai cột:

CREATE INDEX idx_time ON ENTRIES(time, datasourceid) USING BTREE;

Chỉ mục bao trùm yêu cầu rằng các cột ngoài cùng bên trái phải được sử dụng trong truy vấn để chỉ mục được sử dụng. Trong ví dụ này, có time đầu tiên sẽ hoạt động cho cả hai trường hợp bạn đã đề cập - datasourceid không cần phải được sử dụng để chỉ mục được sử dụng. Tuy nhiên, bạn phải kiểm tra các truy vấn của mình bằng cách xem đầu ra GIẢI THÍCH để thực sự biết điều gì hoạt động tốt nhất cho dữ liệu của bạn và các truy vấn đang được thực hiện trên dữ liệu đó.

Điều đó nói rằng, các chỉ mục sẽ làm chậm các câu lệnh INSERT, UPDATE và DELETE. Và một chỉ mục không cung cấp nhiều giá trị nếu dữ liệu cột có ít giá trị khác biệt - IE:cột boolean là một lựa chọn tồi để lập chỉ mục, vì bản số thấp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bảo mật máy chủ MySQL / MariaDB

  2. Java:Chèn nhiều hàng vào MySQL với PreparedStatement

  3. Tắt ONLY_FULL_GROUP_BY

  4. Truy vấn MySQL tương đương với dải_tag PHP là gì?

  5. MySQL:Thêm cột trình tự dựa trên một trường khác