Liệu kích thước varchar có vấn đề trong các bảng tạm thời?


16

Có một cuộc tranh luận trong công việc của vợ tôi về việc chỉ sử dụng varchar(255)cho tất cả các varchartrường trong các bảng tạm thời trong các thủ tục được lưu trữ. Về cơ bản, một trại muốn sử dụng 255 vì nó sẽ luôn hoạt động ngay cả khi định nghĩa thay đổi và trại khác muốn gắn với kích thước trong các bảng nguồn để cải thiện hiệu suất tiềm năng.

Là trại biểu diễn phải không? Có những tác động khác? Họ đang sử dụng SQL Server.


Tôi tranh luận rằng có lẽ bạn không cần bàn tạm thời ở nơi đầu tiên. Chúng đang được sử dụng để làm gì? Nếu chúng cần thiết, những cột cụ thể này đang được sử dụng để làm gì? Chúng được sử dụng trong các phép nối hoặc so sánh dưới bất kỳ hình thức nào? Có bất kỳ cột bên dưới nvarchar và không varchar?
Aaron Bertrand

@AaronBertrand Các bảng tạm thời có sẵn cho mô-đun. Dữ liệu được chuyển đổi và điền vào một số lần dựa trên các quy tắc kinh doanh có thể thay đổi. Tôi nghĩ rằng cũng có một vài MAX()trong hỗn hợp.
Brian Nickel

Câu trả lời:


6

Tùy thuộc vào cách bạn đang sử dụng các bảng tạm thời của mình, bạn có thể gặp phải sự cố cắt dữ liệu.

Ví dụ này là một chút giả định, nhưng nó minh họa quan điểm của tôi. Thí dụ:

  1. Cột bảng người dùng của bạn là varchar (50).
  2. Cột bảng tạm thời của bạn là varchar (255).
  3. Bạn có một bản ghi với 45 ký tự trong cột đó trong bảng người dùng của bạn.
  4. Trong quy trình của bạn, bạn nối '- cho phần thắng' đến cuối cột đó, trước khi hợp nhất bảng tạm thời đó vào bảng người dùng của bạn.

Bảng tạm thời sẵn sàng chấp nhận giá trị varchar mới với độ dài 59. Tuy nhiên, bảng người dùng của bạn không thể. Tùy thuộc vào cách bạn xử lý việc này trong quy trình của mình, điều này có thể dẫn đến việc cắt ngắn hoặc xảy ra lỗi.

Trừ khi bạn có tài liệu và tài khoản cho các vấn đề này, quy trình của bạn có thể thực hiện theo cách không mong muốn.

Cá nhân, tôi không nghĩ rằng có một câu trả lời cho câu hỏi này là chính xác 100% thời gian. Nó thực sự phụ thuộc vào cách bạn đang sử dụng các bảng tạm thời.

Hi vọng điêu nay co ich


0

sử dụng varchar(255)cho tất cả các varchartrường trong các bảng tạm thời trong các thủ tục được lưu trữ.

Tôi sẽ nghiêng về việc sử dụng chiều dài trường thực tế.

Tôi đã đọc gần đây rằng các bảng tạm thời của MySQL (Tôi giả sử SQL Server tương tự) phân bổ đủ bộ nhớ để lưu trữ độ dài tối đa có thể cho mỗi varcharcột ... Một cách tiếp cận có hệ thống để phân bổ 200% -500% bộ nhớ cần thiết cho varchartất cả các trường thủ tục lưu trữ có vẻ như là một sự rút ra không cần thiết về tài nguyên hệ thống. Nếu bạn đã từng sử dụng một lượng bộ nhớ đáng kể để tạo các bảng tạm thời này thì bạn có thể yêu cầu bộ nhớ được sử dụng một cách không cần thiết cho bộ nhớ đệm, tạo ra nhiều công việc hơn cho máy chủ tại một thời điểm nào đó trong tương lai, ngay cả sau khi các thủ tục lưu trữ được thực hiện.

Chỉnh sửa: Xem câu trả lời của Bill Karwin: /programming/1962310/importance-of-varchar-length-in-mysql-table


2
Giả sử SQL Server tương tự? Tôi sẽ không ...
AK

Xin lỗi, tôi nhận ra rằng câu trả lời của tôi là không đầy đủ. Điều tôi muốn nói là tôi sẽ nhầm lẫn về mặt thận trọng (nghĩa là không thực hiện thay đổi có thể ảnh hưởng tiêu cực đến hiệu suất) trừ khi giả định đó được thiết lập là sai.
Matt
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.