Có bất kỳ điểm nào trong việc nhấn mạnh các cột VARCHAR không?


18

Googling xung quanh dường như có các báo cáo hỗn hợp cho dù kích thước của một VARCHAR2cột trong Oracle có ảnh hưởng đến hiệu suất hay không.

Tôi muốn đưa ra câu hỏi về VARCHARkích thước một chút và hy vọng sẽ hiểu rõ hơn về điều này:

Các trường văn bản tự do (đa dòng) ( không phải là thứ ngắn như tên) mà bạn muốn lưu trữ trong cơ sở dữ liệu (Oracle), có bất kỳ điểm nào (hiệu suất hoặc hiệu suất khác) không tối đa hóa VARCHARkhả năng ( VARCHAR2(4000)trên Oracle) mà không chọn một giá trị nhỏ hơn như 1024 hoặc 512 bởi vì điều đó có thể sẽ đủ trong 98% các trường hợp.


Câu trả lời:


12

Nó không ảnh hưởng đến việc sử dụng bộ nhớ, đặc biệt là khi chương trình máy khách phải phân bổ đủ bộ nhớ để nhận dữ liệu.

Hãy nhớ rằng rất nhiều ứng dụng (đặc biệt là ứng dụng web) sử dụng UTF-8 là một bộ ký tự nhiều byte. Như vậy, bạn thực sự nên xem xét các ký tự hơn là byte.

Nếu tôi đang mong đợi hơn một nghìn ký tự, thì tôi sẽ chủ động xem xét một CLOB. Tôi đang suy nghĩ về việc liệu nó sẽ lưu trữ văn bản đơn giản hoặc một số hình thức đánh dấu (wiki / html?), Sử dụng với các ngôn ngữ không phải là Euro. Ví dụ, Câu hỏi và Câu trả lời ở đây sẽ là CLOB, nhưng các nhận xét có thể phù hợp với VARCHAR.

Nếu bạn sử dụng tối đa VARCHAR, sau sáu tháng, ai đó sẽ muốn làm cho nó lớn hơn một lần nữa và bạn sẽ tự đá mình vì không sử dụng CLOB.


2
UTF-8 thường sẽ sử dụng một byte cho một ký tự cho các ngôn ngữ phương Tây. Đó là đa byte theo nghĩa là nó cho phép các chuỗi "thoát" nhiều byte để thể hiện các ký tự không phải phương Tây.
Eric J.

9

Nói chung không có cân nhắc về hiệu suất mặc dù có những vấn đề phụ có thể quan trọng với bạn. Giới hạn cho một varcharnên được coi là một ràng buộc như bất kỳ khác - đó là để thực thi một quy tắc kinh doanh.

IMO câu hỏi bạn nên đặt ra là "Tôi có muốn ngăn dữ liệu văn bản tự do được lưu trữ trong trường này dài hơn n byte / ký tự không" - đó là yếu tố quyết định duy nhất khi chọn giữa varchar(512)varchar(4000).

Lưu ý rằng tôi giả sử bạn đang nói về varcharloại SQL - tình huống khác với pl/sqlvà việc chọn độ dài có thể rất quan trọng vì lý do phân bổ bộ nhớ.


Cảm ơn. Theo như kinh nghiệm của tôi (rất hạn chế), bất kỳ "quy tắc kinh doanh" nào nêu rõ giới hạn trong khoảng "500 - 3999" chỉ đơn giản là tùy ý, nghĩa là ai đó chỉ thích số. IMHO, nếu tôi đang dùng văn bản miễn phí và không có hậu quả thực hiện (bối cảnh của câu hỏi này), thì nó đã được tối đa hóa (4000) hoặc nó không phải là văn bản tự do. --- Điểm tôi đang cố gắng đưa ra trong nhận xét này: Tôi nghĩ sẽ không bao giờ có quy tắc kinh doanh giúp chọn btw. 512 và 4000 (trừ khi đó là: "càng nhiều ký tự càng tốt")
Martin

Nếu nó thực sự là "càng nhiều ký tự càng tốt" thì như @ tổng nói, bạn nên xem xét một clob, phải không?
Jack Douglas

4

Nếu một giá trị nhỏ hơn sẽ hoạt động cho 98% các trường hợp, nhưng phải mất một Varchar2 (4000) để hoạt động cho 100% các trường hợp, thì bạn có ít lựa chọn ngoài việc sử dụng giá trị lớn hơn . Tạo một bảng riêng cho 2% giá trị và sau đó phối hợp chèn / chọn, v.v. sẽ thêm độ phức tạp sẽ xóa sạch mọi lợi ích bộ nhớ hoặc hiệu suất từ ​​việc không mở rộng trường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.