2012-07-11 38 views

Trả lời

57

Dài VARCHAR được lưu trữ theo cách tương tự như trường TEXT/BLOB trong InnoDB.

Từ lưu trữ BLOB tiềm năng, TEXT như cũng như VARCHAR dài được xử lý cùng cách bởi InnoDB. Đây là lý do tại sao Innodb hướng dẫn sử dụng gọi nó là “cột dài” thay vì so với BLOB.

source

Trừ khi bạn cần để index các cột này (trong trường hợp này VARCHAR là nhanh hơn nhiều) không có lý do để sử dụng VARCHAR qua TEXT cho các lĩnh vực dài - có một số optimisations cụ cơ trong MySQL để điều chỉnh việc truy xuất dữ liệu theo độ dài và bạn nên sử dụng đúng loại cột để tận dụng lợi thế của các loại cột này.

Trong trường hợp bạn đang sử dụng MyISAM một cuộc thảo luận chuyên sâu về chủ đề là here.


TEXTBLOB được lưu trữ ra khỏi bàn với bảng chỉ có một con trỏ đến vị trí của lưu trữ thực tế.

VARCHAR được lưu trữ nội tuyến bằng bảng. VARCHAR nhanh hơn khi kích thước hợp lý.

Theo this test, VARCHAR khoảng ba lần nhanh như văn bản.

+8

Xác định "trường dài". –

+3

@PaulBrewczynski> 768 byte (xem liên kết Lion posted) – delrox

+1

Một sửa chữa cho InnoDB: TEXT và BLOB được lưu trữ ngoài bảng trong InnoDB chỉ khi "dài" (> 768 byte) và chỉ đuôi được lưu trữ ngoài bảng (tương tự tới VARCHAR). Sự khác biệt thực sự là độ dài tối đa khác nhau, và với VARCHAR bạn phải cung cấp độ dài tối đa (thực thi cùng với giới hạn hệ thống là 65k). – delrox

4

Văn bản nên được sử dụng cho các chuỗi dài thực sự không xác định. Ngoài ra, các truy vấn trả về các trường TEXT có xu hướng chậm hơn nhiều so với các đối tác VARCHAR của chúng.

+0

Trong cơ sở dữ liệu của tôi, tôi có một cột có tên là Mô tả. Liệu kiểu dữ liệu có phải là VARCHAR hay TEXT không? Tôi không chắc chắn dữ liệu mô tả sẽ kéo dài trong bao lâu, nhưng tôi dự định đặt giới hạn số từ vào giao diện người dùng để nó có độ dài tối đa. – codeinprogress

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