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

Phân vùng bảng mySQL có khóa ngoại?

Nó phụ thuộc vào mức độ mà kích thước của các hàng trong bảng được phân vùng là lý do cần thiết cho các phân vùng.

Nếu kích thước hàng nhỏ và lý do phân vùng là số tuyệt đối trong số các hàng, thì tôi không chắc bạn nên làm gì.

Nếu kích thước hàng khá lớn, thì bạn đã xem xét những điều sau:

Hãy để P là bảng được phân vùng và F là bảng được tham chiếu trong khóa ngoại sẽ là. Tạo bảng mới X :

CREATE TABLE `X` (
    `P_id` INT UNSIGNED NOT NULL,
        -- I'm assuming an INT is adequate, but perhaps
        -- you will actually require a BIGINT
    `F_id` INT UNSIGNED NOT NULL,
    PRIMARY KEY (`P_id`, `F_id`),
    CONSTRAINT `Constr_X_P_fk`
        FOREIGN KEY `P_fk` (`P_id`) REFERENCES `P`.`id`
        ON DELETE CASCADE ON UPDATE RESTRICT,
    CONSTRAINT `Constr_X_F_fk`
        FOREIGN KEY `F_fk` (`F_id`) REFERENCES `F`.`id`
        ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci

và quan trọng, hãy tạo một quy trình được lưu trữ để thêm các hàng vào bảng P . Thủ tục được lưu trữ của bạn phải đảm bảo (sử dụng các giao dịch) nhất định bất cứ khi nào một hàng được thêm vào bảng P , một hàng tương ứng được thêm vào bảng X . Bạn không được phép thêm hàng vào P theo cách "bình thường"! Bạn chỉ có thể đảm bảo rằng tính toàn vẹn của tham chiếu sẽ được duy trì nếu bạn tiếp tục sử dụng quy trình đã lưu trữ của mình để thêm hàng. Bạn có thể tự do xóa khỏi P theo cách thông thường, mặc dù.

Ý tưởng ở đây là bảng của bạn X có đủ các hàng nhỏ mà bạn hy vọng không cần phải phân vùng nó, mặc dù nó có nhiều hàng. Tôi đoán là chỉ mục trên bảng sẽ chiếm một lượng lớn bộ nhớ.

Nếu bạn cần truy vấn P trên khóa ngoại, tất nhiên bạn sẽ truy vấn X thay vào đó, vì đó là nơi thực sự của khóa ngoại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_query chỉ trả về kiểu chuỗi cho kiểu int / fload db

  2. Nó có ảnh hưởng đến hiệu suất khi sử dụng DECIMAL (17,13) cho cả dữ liệu Vĩ độ và Kinh độ trong MySQL không?

  3. Phân trang để hiển thị giá trị tối đa và giới hạn phần còn lại

  4. Ví dụ về UTC_TIME - MySQL

  5. Lưu trữ ngày và tháng (không tính năm)