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

Có thể lập chỉ mục giữa các bảng không?

Như bạn đã biết, SQLServer đạt được điều này với chế độ xem được lập chỉ mục :

Trong SQLServer, để tận dụng lợi thế của kỹ thuật này, bạn phải truy vấn qua dạng xem chứ không phải trên bảng. Điều đó có nghĩa là bạn nên biết về chế độ xem và chỉ mục.

MySQL không có các chế độ xem được lập chỉ mục, nhưng bạn có thể mô phỏng hành vi với bảng + trình kích hoạt + chỉ mục .

Thay vì tạo một dạng xem, bạn phải tạo một bảng được lập chỉ mục, một trình kích hoạt để giữ cho bảng dữ liệu được cập nhật và sau đó, bạn phải truy vấn bảng mới của mình thay vì các bảng chuẩn hóa của bạn.

Bạn phải đánh giá xem chi phí hoạt động ghi có bù đắp sự cải thiện trong hoạt động đọc hay không.

Đã chỉnh sửa:

Lưu ý rằng không phải lúc nào cũng cần thiết phải tạo một bảng mới. Ví dụ:trong trình kích hoạt mối quan hệ 1:N (chính-chi tiết), bạn có thể giữ bản sao của một trường từ bảng 'chính' vào bảng 'chi tiết'. Trong trường hợp của bạn:

CREATE TABLE tableOne (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    tableTwoId INT UNSIGNED NOT NULL,
    objectId INT UNSIGNED NOT NULL,
    desnormalized_eventTime DATETIME NOT NULL,
    INDEX (objectID),
    FOREIGN KEY (tableTwoId) REFERENCES tableTwo (id)
) ENGINE=InnoDB;

CREATE TRIGGER tableOne_desnormalized_eventTime
   BEFORE INSERT ON tableOne
for each row
begin
  DECLARE eventTime DATETIME;
  SET eventTime = 
      (select eventTime 
       from tableOne
       where tableOne.id = NEW.tableTwoId);
  NEW.desnormalized_eventTime = eventTime;
end;

Lưu ý rằng đây là trình kích hoạt chèn trước.

Bây giờ, truy vấn được viết lại như sau:

select * from tableOne t1 
  inner join tableTwo t2 on t1.tableTwoId = t2.id
  where t1.objectId = '..'
  order by t1.desnormalized_eventTime;

Tuyên bố từ chối trách nhiệm:không được kiểm tra.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để kiểm tra cổng MySQL đang chạy và nó có thể được kết nối với?

  2. Làm cách nào để xóa màn hình trong bảng điều khiển MySQL?

  3. Hàm MySQL ACOS () - Trả về Arc Cosine của một số

  4. tải xuống ảnh chụp nhanh RDS

  5. SQL động là gì?