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

Hạn chế về hiệu suất của Khóa chính tổng hợp trong MySQL

INSERTUPDATE hiệu suất thay đổi một chút:nó sẽ gần như giống nhau đối với (INT)(INT, INT) chìa khóa.

SELECT hiệu suất của tổng hợp PRIMARY KEY phụ thuộc vào nhiều yếu tố.

Nếu bảng của bạn là InnoDB , sau đó bảng được nhóm ngầm trên PRIMARY KEY giá trị.

Điều đó có nghĩa là tìm kiếm cả hai giá trị sẽ nhanh hơn nếu cả hai giá trị đều bao gồm khóa:không cần tra cứu thêm khóa.

Giả sử truy vấn của bạn giống như sau:

SELECT  *
FROM    mytable
WHERE   col1 = @value1
        AND col2 = @value2

và bố cục bảng là sau:

CREATE TABLE mytable (
        col1 INT NOT NULL,
        col2 INT NOT NULL,
        data VARCHAR(200) NOT NULL,
        PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB

, công cụ sẽ chỉ cần tra cứu giá trị khóa chính xác trong chính bảng.

Nếu bạn sử dụng trường autoincrement làm id giả:

CREATE TABLE mytable (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        col1 INT NOT NULL,
        col2 INT NOT NULL,
        data VARCHAR(200) NOT NULL,
        UNIQUE KEY ix_mytable_col1_col2 (col1, col2)
) ENGINE=InnoDB

, thì trước tiên, engine sẽ cần tra cứu các giá trị của (col1, col2) trong chỉ mục ix_mytable_col1_col2 , truy xuất con trỏ hàng từ chỉ mục (giá trị của id ) và thực hiện tra cứu khác theo id trong chính bảng.

Đối với MyISAM tuy nhiên, điều này không có gì khác biệt, bởi vì MyISAM các bảng được tổ chức theo nhóm và con trỏ hàng chỉ là phần bù của tệp.

Trong cả hai trường hợp, một chỉ mục giống nhau sẽ được tạo (cho PRIMARY KEY hoặc cho UNIQUE KEY ) và sẽ được sử dụng theo cách tương tự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Docker Soạn mysql nhập .sql

  2. PHP Chèn dữ liệu từ bảng này sang bảng khác

  3. Triển khai &Quản lý Cụm NDB của MySQL với ClusterControl

  4. MySQL Trường hợp ngày lớn hơn một tháng?

  5. Không thể cài đặt đá quý mysql trên OS X