2010-11-03 31 views
7

Tôi đã hỏi Google nhưng tôi vẫn còn bối rối.Lập chỉ mục một cột varchar

1) Có sự cố khi lập chỉ mục cột Varchar không. Khi tôi không nên và khi tôi nên

2) Lập chỉ mục cột char VS Varchar column.

Cảm ơn

+0

Nếu u có thể hỗ trợ một câu trả lời hiện có, hoặc có một cái gì đó để thêm, xin vui lòng làm điều đó. – Costa

Trả lời

4

1 - Lập chỉ mục nếu bạn đang truy vấn và đủ chọn lọc. Nếu nó là một cột mà 90% các giá trị là như nhau, sẽ không có nhiều điểm.

2 - Đây không phải là một câu hỏi, nhưng tôi sẽ đoán bạn muốn biết nếu bạn cần. Có, nếu bạn truy vấn nó và nó đáp ứng các tiêu chí trên.

+1

Thật vậy, việc lập chỉ mục (N) varchar cột hoạt động tốt. Chỉ gotcha sẽ được xem ra cho giới hạn chiều rộng 900 byte – StuartLC

+0

Có những vấn đề chỉ số với varchar (max) và nvarchar (max) đó là lý do tại sao họ không nên được sử dụng trừ khi bạn có ý định tràn kích thước của varchar bình thường và nvarchar cánh đồng. – HLGEM

+0

@ HLGEM - bạn có thể xây dựng không? – JNK

0

Nói chung hiệu suất

Về lý thuyết/thiết kế, bạn có một mô hình logic ở đâu, tiếng nói, tên người dùng là duy nhất.

Tuy nhiên, tại thời điểm triển khai, bạn biết rằng sử dụng điều này là tốn kém (trường hợp, dấu trọng âm, vv) so với sử dụng cột "userid" thay thế hiệu quả hơn làm chỉ mục. Nói rằng, bạn sẽ có một chỉ mục trên tên vì nó nên là duy nhất.

Sự khác biệt sẽ là nơi bạn sử dụng chỉ mục này: nếu nó nằm trong bảng con làm cột khóa ngoài, thì đó không phải là ý tưởng hay. Hoặc như một chỉ số nhóm.

Là một chỉ mục duy nhất cho một bảng không có FK, thì không phải ở đây cũng không có.

Cuối cùng, tôi chỉ sử dụng char/varchar cho các nội dung như ngôn ngữ ISO hoặc mã tiền tệ (DE, EN, GBP, CHF, v.v.). Nhưng cắt giảm của tôi thay đổi để trung thực ...

4
  • 1) Có, giới hạn 900 byte, khóa lớn, nhiều trang chỉ mục, nhiều I/O tham gia, hoạt động chỉ mục không hiệu quả. Kết luận: KHÔNG trừ khi varchar của bạn có tối đa 50 ký tự. kích thước
  • quảng cáo 2) Tương tự như 1. Sự khác biệt thực sự giữa char vs varchar được cố định so với kích thước biến (ví dụ. char(100)) luôn có 100 byte trong trang dữ liệu, varchar(100) mất đến 100)
Các vấn đề liên quan