2010-06-27 60 views
6

Mặc dù tôi hiểu rằng nó rất thuận lợi để có chỉ mục trên một cột duy nhất - để kiểm tra va chạm giá trị một cách dễ dàng và hiệu quả, tôi nghĩ rằng nên lập trình viên để xác định liệu cột trường duy nhất có chỉ mục hay không không, liên quan đến tối ưu hóa kích thước và tốc độ.MySQL: Trường có cột 'duy nhất' ngụ ý một chỉ mục không và nếu có thì tại sao?

Theo tôi hiểu, MySQL tự động lập chỉ mục cột bảng được chỉ định là duy nhất. Có phải vậy không?

Có bất kỳ lý do nào MySQL dường như không thể có các cột duy nhất KHÔNG CÓ chỉ mục? Có, mọi giá trị chèn/cập nhật sẽ là hoạt động O (number_of_rows) mà không có một, nhưng như tôi đã nói, không nên lập trình viên bị đánh thuế với quyết định?

Rất tò mò!

Trả lời

11

Theo tôi hiểu, MySQL tự động lập chỉ mục cột bảng được chỉ định là duy nhất. Có phải vậy không?

Có. Nó không nhất thiết là 'tự động' mặc dù, nó ngầm. UNIQUEloại chỉ mục, do đó tất nhiên cột đó được lập chỉ mục.

Có lý do nào dường như MySQL không thể có các cột duy nhất KHÔNG CÓ chỉ mục?

Bởi vì nó sẽ là ngớ ngẩn cho MySQL để làm một bảng đầy đủ quét trên mỗi INSERT/UPDATE để duy trì các hạn chế duy nhất.

Sửa:

Vâng, mỗi giá trị chèn/cập nhật sẽ là O (number_of_rows) hoạt động mà không có một, nhưng cũng giống như tôi đã nói, nên không phải là lập trình viên bị đánh thuế với quyết định?

Tại sao một lập trình viên muốn thực thi thủ công toàn vẹn dữ liệu cơ bản bên ngoài lớp lưu trữ dữ liệu? Tôi hiểu nơi bạn đang đi với điều này, nhưng thực tế là một chỉ số không thể có thể làm tổn thương bất cứ điều gì (nó chỉ mất một chút không gian hơn) - do đó, thực sự không phải là một quyết định để xem xét.

+1

Thực tế, một lý do để sử dụng DBMS là duy trì tính toàn vẹn của dữ liệu. –

+0

Tính toàn vẹn dữ liệu và lập chỉ mục dữ liệu, mặc dù có liên quan, là hai khái niệm trực giao, phải không? – amn

+1

@amn, vâng, tôi tin là vậy. Và hầu hết thời gian, giải pháp cho tính toàn vẹn dữ liệu không quá thanh lịch như trường hợp cụ thể này. Nhiều lần nó đi xuống để có thể chất kiểm tra xem dữ liệu được cho là có thực sự ở đó. Tất nhiên điều này cũng phụ thuộc vào RDMS, hỗ trợ cho các khóa ngoại, các ràng buộc chính, v.v. –

Các vấn đề liên quan