Có sự khác biệt về hiệu suất giữa varchar(1)
và char(1)
không? RDBMS nào xử lý hai kiểu dữ liệu và kích thước này theo các cách khác nhau?hiệu suất giữa varchar (1) so với char (1)
Trả lời
Sự khác biệt sẽ không đáng kể trong hầu hết các trường hợp. Tập trung nỗ lực thiết kế theo định hướng hiệu suất của bạn ở những nơi mà nó sẽ tạo ra sự khác biệt thực sự, như thành phần bảng và thiết kế chỉ mục.
Nó giúp chia nỗ lực thiết kế thành hai lớp: thiết kế logic và thiết kế vật lý.
Hầu hết các nỗ lực định hướng hiệu suất là ở giai đoạn thứ hai, thiết kế vật lý.
Trong thiết kế logic, tính linh hoạt vượt trội hơn hiệu suất. Ngoại trừ khi nó không.
nó hầu như không quan trọng, vì bạn đang sử dụng 1 byte trong cả hai trường hợp.
nhưng dài câu chuyện ngắn, varchar là biến kích thước & char là kích thước cố định. với số lượng lớn điều này có thể tạo ra sự khác biệt về không gian lưu trữ cũng như ảnh hưởng đến thời gian tính toán.
hiệu suất khôn ngoan, sử dụng char nếu dữ liệu sẽ có độ dài cố định. nếu bạn linh hoạt với độ dài khác nhau của dữ liệu thì hãy sử dụng varchar.
*** KHÔNG 1 byte trong cả hai trường hợp! *** - ví dụ - MYSQL v5.0 tài liệu nói yêu cầu lưu trữ varchar cho varchar (M) yêu cầu 'L + 1 byte nếu giá trị cột yêu cầu 0 - 255 byte' (trong đó L thể hiện độ dài thực tế theo byte của Chuỗi giá trị). Vì vậy, bạn sẽ sử dụng 1 byte cho CHAR (1) và 2 byte cho VARCHAR (1). Trong trường hợp này, bạn đang sử dụng không gian lưu trữ nhiều hơn 100% cho cột này. Điều này có thể hoặc có thể không phải là một việc lớn tùy thuộc vào tình hình sử dụng. Worth chỉ ra sự khác biệt mặc dù trong trường hợp nó là thích hợp. (xem http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html) –
Theo như Oracle có liên quan ....
CHAR (2) sẽ luôn sử dụng hai byte/ký tự lưu trữ. VARCHAR2 (2) chỉ có thể sử dụng một. Vì vậy, trường hợp chung là sử dụng VARCHAR2 thay vì CHAR.
Trong thực tế, bạn sẽ không thấy hiệu suất khác biệt khôn ngoan cho cột một ký tự.
Vì không bao giờ có lợi ích từ CHAR, tôi luôn sử dụng VARCHAR2.
VARCHAR sẽ vẫn phải lưu trữ ít nhất một byte cho độ dài của chuỗi, mặc dù vậy, bạn không bao giờ có ít hơn 1 byte. – Gabe
Sự hiểu biết của tôi sau khi đọc mô tả của VARCHAR và CHAR của MySQL là nếu dữ liệu của bạn luôn có cùng độ dài, thì CHAR có thể giúp bạn tiết kiệm một byte dữ liệu vì VARCHAR yêu cầu lưu trữ byte riêng biệt từ dữ liệu thực tế để ghi lại dữ liệu trong bao lâu. Tuy nhiên, nếu dữ liệu của bạn không phải là một độ dài không đổi và bạn đang nghĩ đến các cân nhắc về không gian, sẽ rất có ý nghĩa khi sử dụng VARCHAR vì CHAR sẽ luôn sử dụng một byte cho mỗi bit chiều dài được khai báo cho dù có bất kỳ điều gì trong không gian đó .
Cuối cùng, mặc dù, nó có thể không tạo ra sự khác biệt lớn như lượng dữ liệu liên quan là khá nhỏ.
Đây là nơi tôi nhận được thông tin của mình: http://dev.mysql.com/doc/refman/5.0/en/char.html Nếu bạn theo liên kết, hãy đặc biệt chú ý đến biểu đồ nhỏ vì nó đưa ra ví dụ về cách dữ liệu được xử lý với VARCHAR so với CHAR.
Trong MS SQL VARCHAR (1) sử dụng BA byte bộ nhớ và CHAR (1) sử dụng một byte dung lượng lưu trữ.
CHAR (1) hiệu quả hơn VARCHAR (1) trong quá trình xử lý và lưu trữ.
Điểm 'hòa vốn' trên VARCHAR sẽ lớn hơn 3 ký tự nếu sử dụng dữ liệu có độ dài thay đổi.
Nếu sử dụng độ dài cố định thì CHAR luôn hiệu quả hơn hai byte.
Đối với Oracle
Các VARCHAR2 (1) và CHAR (1) là giống hệt nhau về mọi mặt. Không có lý do thuyết phục để sử dụng loại CHAR trong trường hợp đó và để tránh bất kỳ sự nhầm lẫn nào , tôi “chỉ nói không” ngay cả đối với trường CHAR (1).
tham khảo: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2668391900346844476
- 1. Hiệu suất mảng 2 chiều so với mảng 1 chiều
- 2. Sự khác biệt giữa $ 1 so với% 1 in .htaccess
- 3. NCHAR (1) so với BIT
- 4. LIMIT 1 có tăng hiệu suất không?
- 5. Hiệu suất chênh lệch: chọn 1 đơn hàng đầu tiên so với chọn min (val)
- 6. strftime hiệu suất so với snprintf
- 7. MAX so với Top 1 - tốt hơn?
- 8. Hiệu suất CALayer so với hiệu suất UIImageView
- 9. nump.array so với np.matrix (hiệu suất)
- 10. Hiệu suất C++, trong khi so với
- 11. groovy 'switch' so với 'if' hiệu suất
- 12. Ngụ ý so sánh chuỗi, 0 = '', nhưng 1 = '1'
- 13. : gt (0) so với: không (: đầu tiên) so với .slice (1)
- 14. Bộ đệm giao thức của Google so với ASN.1
- 15. Hiệu suất WCF net.tcp so với namedpipes
- 16. Hiệu suất Pow() so với exp()
- 17. Hiệu suất mysql BIGINT so với INT
- 18. smallint so với int về hiệu suất
- 19. Nhận giá trị kép ngẫu nhiên giữa -1 và 1
- 20. So sánh hiệu suất của NSArray so với C Array
- 21. hiệu suất của adaptIntegrate so với tích hợp
- 22. Sự khác nhau giữa 1..5, [* 1..5] và [1..5] trong Groovy là gì?
- 23. Đối với Linq - Hiệu suất so với Tương lai
- 24. tín hiệu 11 (SIGSEGV), mã 1 (SEGV_MAPERR)
- 25. Hiệu suất Scala: bắt buộc so với kiểu chức năng
- 26. So sánh hiệu suất của Derby so với PostgreSql
- 27. Tại sao [:] = 1 về cơ bản khác với [:] = '1'?
- 28. Tại sao một số không dấu int 1 thấp hơn char y -1?
- 29. "SELECT TOP 1 1" VS "IF EXISTS (SELECT 1"
- 30. MySQL - Sự khác biệt giữa Char và Varchar?
Tính linh hoạt hầu như không bao giờ được tăng hiệu suất! Tôi đảm bảo người dùng muốn performacne trên sự linh hoạt ngay cả khi họ nói rằng họ muốn sự linh hoạt. – HLGEM