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

MySQL xác định cột là DUY NHẤT với AUTO_INCREMENT thay vì là Khóa chính

Định nghĩa MySQL mà không có rõ ràng khóa chính là một ý tưởng rất tồi.
Nếu thiếu một PK, MySQL sẽ tạo một khóa chính tự động bổ sung số nguyên ngầm (nhưng rất thực).
PK này sẽ được bao gồm trong mọi khóa phụ trong InnoDB và sẽ xác định thứ tự sắp xếp chính của bạn trong MyISAM.

Kết quả
Bạn vừa làm chậm hiệu suất của mọi lựa chọn, chèn và cập nhật.
Không vì mục đích gì.

InnoDB:cần tra cứu thêm để truy cập dữ liệu bảng
Trong InnoDB, cần phải tra cứu thêm vì tất cả các chỉ mục phụ tham chiếu đến PK chứ không phải bản thân các hàng.

MyISAM:không gian lãng phí
Trong MyISAM, hình phạt không lớn lắm, nhưng bạn vẫn đang kéo theo một trường không sử dụng 4 byte mà không được sử dụng.

InnoDB + MyISAM:Thế hệ vô dụng của trường tự động tăng thêm
Bởi vì một PK tự động cộng ngầm ngầm được tạo và bạn cũng cần thêm một khóa tự động tăng thêm để thực hiện các phép tham gia; Để ngăn các trường tự động tăng trùng lặp, bây giờ bạn không có 1 mà là 2 khóa bảng cho mỗi lần chèn.

InnoDB:với các phép tham gia, tăng gấp đôi probem tra cứu được đề cập ở trên
Nếu bạn thực hiện tham gia bằng trường không phải là PK, InnoDB cần thực hiện tra cứu thêm mỗi lần tham gia để truy cập các bản ghi của bảng khác đó.

InnoDB:tệ nhất là bạn mất đi lợi ích của việc bao gồm các chỉ mục
Bạn đã vô hiệu hóa một trong những tối ưu hóa tốt nhất trong InnoDB, bao gồm các chỉ mục.
Nếu MySQL có thể giải quyết truy vấn chỉ sử dụng dữ liệu trong các chỉ mục, nó sẽ không bao giờ đọc bảng, điều này sẽ dẫn đến tốc độ đáng kể lợi. Bây giờ, 50% của mọi chỉ mục trong InnoDB là không gian chưa sử dụng, bạn vừa loại bỏ cơ hội tối ưu hóa đó được sử dụng.

Vui lòng đánh bại nhà thầu này bằng một thanh manh mối!

Liên kết:
http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/ (liên kết chậm, nhưng khuyên bạn nên đọc).
O'Reilly trên các chỉ mục bao trùm của InnoDB http://tag1consults.com/MySQL_Engines_MyISAM_vs_InnoDB

BTW , nếu nhà thầu của bạn nói, điều đó không quan trọng lắm vì anh ta đang sử dụng MyISAM, hãy đánh bại anh ta một lần nữa, bạn nên luôn sử dụng InnoDB trừ khi bạn có lý do chính đáng.
InnoDB an toàn hơn nhiều trong sản xuất, MyISAM có sử dụng nhưng quá dễ bị hỏng.



  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 lấy ResultSetMetaData tương đương mà không có ResultSet

  2. Tạo thẻ html tùy chỉnh cho CMS?

  3. Truy vấn được đặt tên ở chế độ ngủ đông - tham gia 3 bảng

  4. Session_start Chi tiết hồ sơ người dùng

  5. NOW () Ví dụ - MySQL