Chỉ mục duy nhất của MySQL NULL
Chỉ mục duy nhất là chỉ mục giúp duy trì tính toàn vẹn của dữ liệu bằng cách đảm bảo rằng không có hàng dữ liệu nào trong bảng có giá trị khóa giống hệt nhau Show
Khi bạn tạo một chỉ mục duy nhất cho một bảng hiện có với dữ liệu, các giá trị trong các cột hoặc biểu thức bao gồm khóa chỉ mục sẽ được kiểm tra tính duy nhất. Nếu bảng chứa các hàng có giá trị khóa trùng lặp, quá trình tạo chỉ mục không thành công. Khi một chỉ mục duy nhất được xác định cho một bảng, tính duy nhất được thực thi bất cứ khi nào các khóa được thêm hoặc thay đổi trong chỉ mục. Việc thực thi này bao gồm chèn, cập nhật, tải, nhập và đặt tính toàn vẹn, v.v. Ngoài việc thực thi tính duy nhất của các giá trị dữ liệu, một chỉ mục duy nhất cũng có thể được sử dụng để cải thiện hiệu suất truy xuất dữ liệu trong quá trình xử lý truy vấn Các chỉ mục không phải là duy nhất không được sử dụng để thực thi các ràng buộc trên các bảng mà chúng được liên kết. Thay vào đó, các chỉ mục không phải là duy nhất chỉ được sử dụng để cải thiện hiệu suất truy vấn bằng cách duy trì thứ tự được sắp xếp của các giá trị dữ liệu được sử dụng thường xuyên Bao gồm và loại trừ các phím NULLCác chỉ mục duy nhất và không duy nhất có thể được tạo để khóa không được chèn vào đối tượng chỉ mục khi tất cả các cột hoặc biểu thức của khóa là null. Việc loại trừ các khóa null có thể dẫn đến việc tối ưu hóa hiệu suất và lưu trữ được cải thiện đối với các trường hợp bạn không muốn truy vấn truy cập dữ liệu được liên kết với các khóa null. Đối với các chỉ mục duy nhất, việc thực thi tính duy nhất của dữ liệu bảng sẽ bỏ qua các hàng có khóa chỉ mục là nullSự khác biệt giữa ràng buộc khóa chính hoặc khóa duy nhất và chỉ mục duy nhấtĐiều quan trọng là phải hiểu rằng không tồn tại sự khác biệt đáng kể giữa ràng buộc khóa chính hoặc khóa duy nhất và chỉ mục duy nhất. Để thực hiện khái niệm ràng buộc khóa chính và khóa duy nhất, trình quản lý cơ sở dữ liệu sử dụng kết hợp chỉ mục duy nhất và ràng buộc NOT NULL. Do đó, các chỉ mục duy nhất không tự thực thi các ràng buộc khóa chính vì chúng cho phép các giá trị null. Mặc dù giá trị null đại diện cho các giá trị không xác định, nhưng khi lập chỉ mục, giá trị null được coi là bằng với các giá trị null khác Do đó, nếu một chỉ mục duy nhất bao gồm một cột, thì chỉ cho phép một giá trị null-nhiều hơn một giá trị null sẽ vi phạm ràng buộc duy nhất. Tương tự, nếu một chỉ mục duy nhất bao gồm nhiều cột, thì chỉ có thể sử dụng một tổ hợp giá trị và null cụ thể một lần Tôi đã dành thời gian làm việc với các chỉ mục khi tìm hiểu về MySQL và có một vài điều tôi nghĩ là đáng đề cập. Như mọi khi, tôi viết từ kiến thức của bản thân với kinh nghiệm sâu sắc về IBM DB2 và với tư cách là một người học khi nói đến MySQL NULL trong các chỉ mục duy nhấtMySQL xử lý NULL trong một chỉ mục duy nhất rất khác so với Db2. Trong Db2 (trên LUW), NULL phần nào được coi là một giá trị và một chỉ mục duy nhất chỉ có thể có một giá trị NULL. Trong MySQL, một chỉ mục duy nhất có thể có bất kỳ số lượng giá trị NULL nào và chúng vẫn được coi là duy nhất. Một ví dụ nhanh chóng và đơn giản để hiển thị điều này. Trong Db2
Các thao tác tương tự trong MYSQL (8)
Trong các ví dụ này, chúng tôi chèn một hàng, sau đó cố gắng chèn cùng một hàng và gặp lỗi khi cố gắng chèn một giá trị trùng lặp trên cả hai nền tảng. Sau đó, chúng tôi cố gắng chèn một hàng có NULL vào cột có chỉ mục duy nhất. Db2 cho phép lần chèn đầu tiên và sau đó lần chèn thứ hai không thành công vì chỉ mục duy nhất đã có NULL trong đó. MySQL cho phép lần chèn đầu tiên VÀ cho phép lần chèn thứ hai Đây là hành vi khó hiểu khi bạn lần đầu tiên nhìn thấy nó, bất kể bạn đã quen với bên nào Sự hiểu biết của tôi, mà không cần nghiên cứu kỹ lưỡng, là Oracle và PostgreSQL cũng sử dụng phương pháp MySQL, trong khi MS SQL Server sử dụng phương pháp Db2 Lập chỉ mục NULLMySQL không lập chỉ mục NULL. Db2 Lập chỉ mục chúng theo mặc định, nhưng NULL có thể được loại trừ trên hầu hết các loại bảng/chỉ mục bằng cách sử dụng cú pháp mysqlĐây là một ví dụ về điều đó trong MySQL. Tôi đang sử dụng cơ sở dữ liệu sakila. Tôi đã tạo một bảng giả sử dụng bảng cho thuê làm điểm bắt đầu, tăng lượng dữ liệu, duy trì số dư 50% giá trị null cho cột return_date
Lượng dữ liệu đáng kể là để đối phó với xu hướng luôn chọn quét bảng khi các bảng thực sự nhỏ. Sau đó, khi tôi chạy một truy vấn dựa trên cột return_date, bạn có thể thấy các kế hoạch truy cập dự kiến khác nhau cho null và không null
Giải thích về điều kiện IS NULL là sử dụng chỉ mục test_idx mà tôi đã tạo để lấy dữ liệu. Điều kiện IS NOT NULL đang thực hiện quét toàn bộ bảng Db2Đây là thử nghiệm tương tự trong Db2. Về cơ bản, tôi đã sử dụng cơ sở dữ liệu sakila, với một vài điều chỉnh. Lưu ý rằng tôi thực sự không thể sử dụng cú pháp để tạo bảng như RENTAL trong Db2 bởi vì khi tôi làm vậy, không chỉ các chỉ mục không được tạo (một tác dụng phụ của thực tế là tên chỉ mục Db2 phải là duy nhất cho mỗi cơ sở dữ liệu, trong khi MySQL phải
Các giải thích sau đó trông giống như thế này. Lưu ý rằng tôi đang sử dụng một phương pháp giải thích khác thường ở đây sẽ làm cho đầu ra trông giống MS SQL Server hơn và nhỏ gọn hơn để vừa với màn hình. Nó chỉ là một cái nhìn trên các bảng giải thích có sẵn miễn phí tại liên kết ở trên
Trong Db2, một chỉ mục được sử dụng cho từng mục này và bạn có thể thấy rằng chi phí dự kiến là giống hệt nhau. Nếu tôi bỏ chỉ mục để buộc quét bảng, phần giải thích sẽ như thế này
Không phải là một sự khác biệt lớn về chi phí ở kích thước bảng này, nhưng là một sự khác biệt có thể đo lường được
Ember Crooks https. //datageek. Blog/ than hồng. kẻ lừa đảo @ gmail. com Ember luôn tò mò và phát triển nhờ sự thay đổi. Cô ấy đã xây dựng kiến thức chuyên môn được quốc tế công nhận về IBM Db2 và hiện đang chuyển sang tập trung vào việc học MySQL. Ember chia sẻ cả hai bài đăng về bộ kỹ năng cốt lõi và hành trình học MySQL của cô ấy. Ember sống ở Denver và làm việc tại nhà Chỉ mục duy nhất có thể có giá trị NULL MySQL không?Chỉ mục duy nhất phải là duy nhất, nhưng chỉ mục đó có thể rỗng . Vì vậy, mỗi giá trị khóa chỉ xác định một bản ghi, nhưng không phải mỗi bản ghi cần được biểu diễn.
Chỉ mục duy nhất có thể là NULL không?Mặc dù giá trị null đại diện cho giá trị không xác định, nhưng khi lập chỉ mục, giá trị null được coi là bằng với các giá trị null khác. Do đó, nếu một chỉ mục duy nhất bao gồm một cột duy nhất, thì chỉ cho phép một giá trị null -nhiều hơn một giá trị null sẽ vi phạm ràng buộc duy nhất.
NULL có được phép trong MySQL ràng buộc duy nhất không?Bạn có thể chèn giá trị NULL vào các cột có ràng buộc ĐỘC ĐÁO vì NULL là trường hợp không có giá trị nên không bao giờ bằng các giá trị NULL khác và không được coi là giá trị trùng lặp. |