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

Giới hạn kích thước chỉ mục 900 byte về độ dài ký tự

Kích thước lưu trữ cho varchar là độ dài thực của dữ liệu được nhập + 2 byte. Mặc dù bản thân cột có chi phí 2 byte đó, bạn có thể đặt các giá trị varchar lên đến 900 byte vào một cột được lập chỉ mục.

Trong thực tế, bạn có thể tạo chỉ mục trên cột có kích thước lớn hơn 900 byte, nhưng bạn sẽ gặp sự cố nếu thực sự cố gắng chèn một cái gì đó lớn hơn 900 byte:

create table test (
    col varchar(1000)
);
create index test_index on test (col);
-- Warning! The maximum key length is 900 bytes. The index 'test_index' has maximum length of 1000 bytes. For some combination of large values, the insert/update operation will fail.
insert into test select cast(replicate('x', 899) as varchar(1000)); -- Success
insert into test select cast(replicate('y', 900) as varchar(1000)); -- Success
insert into test select cast(replicate('z', 901) as varchar(1000)); -- Fail
-- Msg 1946, Level 16, State 3, Line 8
-- Operation failed. The index entry of length 901 bytes for the index 'test_index' exceeds the maximum length of 900 bytes.

Lưu ý rằng giới hạn 900 byte bao gồm tất cả các cột của một khóa chỉ mục nhất định, như ví dụ sau cho thấy:

create table test (
      col varchar(1000)
    , otherCol bit -- This column will take a byte out of the index below, pun intended
);
create index test_index on test (col, otherCol);
insert into test select cast(replicate('x', 899) as varchar(1000)), 0; -- Success
insert into test select cast(replicate('y', 900) as varchar(1000)), 0; -- Fail
insert into test select cast(replicate('z', 901) as varchar(1000)), 0; -- Fail

Đối với những cột này thường quá lớn đối với một khóa chỉ mục, bạn có thể đạt được một số lợi ích của việc lập chỉ mục bằng cách đưa chúng vào một 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. Tổng quan về các kiểu Nối SQL với các ví dụ

  2. Giao dịch xung quanh một câu lệnh đơn làm gì?

  3. Biểu thức bảng thông thường, tại sao lại có dấu chấm phẩy?

  4. Cắt bớt tất cả các bảng trong Cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 55

  5. Một chế độ xem có nhanh hơn một truy vấn đơn giản không?