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

Sự khác biệt giữa INDEX, PRIMARY, UNIQUE, FULLTEXT trong MySQL?

Sự khác biệt

  • KEY hoặc INDEX đề cập đến một chỉ mục bình thường không phải là duy nhất. Các giá trị không khác biệt cho chỉ mục được cho phép, vì vậy chỉ mục có thể chứa các hàng có giá trị giống nhau trong tất cả các cột của chỉ mục. Các chỉ mục này không thực thi bất kỳ hạn chế nào đối với dữ liệu của bạn nên chúng chỉ được sử dụng để truy cập - để nhanh chóng tiếp cận các phạm vi bản ghi nhất định mà không cần quét tất cả các bản ghi.

  • DUY NHẤT đề cập đến một chỉ mục trong đó tất cả các hàng của chỉ mục phải là duy nhất. Nghĩa là, cùng một hàng có thể không có các giá trị không phải NULL giống hệt nhau cho tất cả các cột trong chỉ mục này như một hàng khác. Ngoài việc được sử dụng để nhanh chóng đạt được các phạm vi bản ghi nhất định, chỉ mục UNIQUE có thể được sử dụng để thực thi các hạn chế đối với dữ liệu, vì hệ thống cơ sở dữ liệu không cho phép phá vỡ quy tắc giá trị riêng biệt khi chèn hoặc cập nhật dữ liệu.

    Hệ thống cơ sở dữ liệu của bạn có thể cho phép áp dụng chỉ mục DUY NHẤT cho các cột cho phép giá trị NULL, trong trường hợp này hai hàng được phép giống hệt nhau nếu cả hai hàng đều chứa giá trị NULL (lý do ở đây là NULL được coi là không bằng chính nó). Tuy nhiên, tùy thuộc vào ứng dụng của bạn, bạn có thể thấy điều này không mong muốn:nếu bạn muốn ngăn chặn điều này, bạn nên không cho phép các giá trị NULL trong các cột có liên quan.

  • CHÍNH TẢ hoạt động chính xác như một chỉ mục DUY NHẤT, ngoại trừ việc nó luôn được đặt tên là 'CHÍNH' và có thể chỉ có một chỉ mục trên bảng (và ở đó nên luôn luôn là một; mặc dù một số hệ thống cơ sở dữ liệu không thực thi điều này). Chỉ mục CHÍNH được sử dụng như một phương tiện chính để xác định duy nhất bất kỳ hàng nào trong bảng, vì vậy không giống như UNIQUE, chỉ mục này không nên được sử dụng trên bất kỳ cột nào cho phép giá trị NULL. Chỉ mục CHÍNH của bạn phải nằm trên số cột nhỏ nhất đủ để xác định duy nhất một hàng. Thông thường, đây chỉ là một cột chứa một số tự động tăng dần duy nhất, nhưng nếu có bất kỳ thứ gì khác có thể xác định duy nhất một hàng, chẳng hạn như "mã quốc gia" trong danh sách các quốc gia, bạn có thể sử dụng cột đó để thay thế.

    Một số hệ thống cơ sở dữ liệu (chẳng hạn như MySQL's InnoDB) sẽ lưu trữ các bản ghi của bảng trên đĩa theo thứ tự mà chúng xuất hiện trong chỉ mục CHÍNH.

  • FULLTEXT các chỉ mục khác với tất cả các chỉ mục trên và hành vi của chúng khác nhau đáng kể giữa các hệ thống cơ sở dữ liệu. Chỉ mục FULLTEXT chỉ hữu ích cho các tìm kiếm toàn văn được thực hiện với mệnh đề MATCH () / AGAINST (), không giống như ba chỉ mục ở trên - thường được triển khai nội bộ bằng cách sử dụng cây b (cho phép chọn, sắp xếp hoặc phạm vi bắt đầu từ cột bên trái nhất) hoặc bảng băm (cho phép lựa chọn bắt đầu từ cột bên trái nhất).

    Trong trường hợp các loại chỉ mục khác có mục đích chung, chỉ mục FULLTEXT là chuyên biệt, trong đó chỉ mục này phục vụ mục đích hẹp:chỉ được sử dụng cho tính năng "tìm kiếm toàn văn".

Điểm giống nhau

  • Tất cả các chỉ mục này có thể có nhiều hơn một cột trong đó.

  • Ngoại trừ FULLTEXT, thứ tự cột rất quan trọng:để chỉ mục hữu ích trong một truy vấn, truy vấn phải sử dụng các cột từ chỉ mục bắt đầu từ bên trái - nó không thể chỉ sử dụng phần thứ hai, thứ ba hoặc thứ tư của một chỉ mục, trừ khi nó cũng đang sử dụng các cột trước đó trong chỉ mục để khớp với các giá trị tĩnh. (Để chỉ mục FULLTEXT hữu ích cho truy vấn, truy vấn phải sử dụng tất cả các cột của chỉ mục.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xác định một biến trong vùng chọn và sử dụng nó trong cùng một vùng chọn

  2. Làm thế nào để điền vào một bảng với một phạm vi ngày?

  3. @GeneratedValue siêu lớp trừu tượng đa hình trên MySQL

  4. Làm cách nào để tìm kiếm dấu gạch chéo (\) trong MySQL? và tại sao không cần thoát (\) cho where (=) nhưng lại bắt buộc phải Like?

  5. C # với tham số INSERT của MySQL