Có lợi thế về hiệu suất khi sử dụng enum trong các tình huống mà chỉ có 5-10 giá trị có thể khác nhau cho một trường không? nếu không phải lợi thế là gì?Lợi thế hiệu suất của MySQL Enum?
Trả lời
Có một hiệu suất rất lớn phạt để sử dụng ENUM
cho các hoạt động như:
Query danh sách các giá trị cho phép trong
ENUM
, ví dụ để cư một trình đơn thả xuống. Bạn phải truy vấn kiểu dữ liệu từINFORMATION_SCHEMA
và phân tích cú pháp danh sách ra khỏi trường BLOB được trả lại.Thay đổi tập hợp các giá trị được phép. Nó yêu cầu một tuyên bố
ALTER TABLE
, khóa bảng và có thể thực hiện tái cơ cấu.
Tôi không phải là người hâm mộ của MySQL ENUM
. Tôi thích sử dụng bảng tra cứu hơn. Xem thêm câu trả lời của tôi cho "How to handle enumerations without enum fields in a database?"
Không, xem so sánh here
Lợi thế đặt ở mức dễ đọc mã.
Theo bài viết bạn đã liên kết, đó là lợi thế hiệu suất khi sử dụng ENUM miễn là bạn không thay đổi trạng thái có thể. –
ENUM được thể hiện bên trong bằng 1 hoặc 2 byte, tùy thuộc vào số lượng giá trị. Nếu các chuỗi bạn đang lưu trữ lớn hơn 2 byte và hiếm khi thay đổi, thì ENUM là cách để đi. So sánh sẽ nhanh hơn với một enum và chúng chiếm ít không gian trên đĩa, do đó có thể dẫn đến thời gian tìm kiếm nhanh hơn.
Nhược điểm là enums ít linh hoạt hơn khi nói đến việc thêm/xóa các giá trị.
Tôi không chắc bạn đang đề cập đến phiên bản MySQL nào. Nhưng kể từ 5.0, kích thước của loại enum là 1 hoặc 2 byte phụ thuộc vào số lượng giá trị có thể theo hướng dẫn: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html Vì chỉ có 5 đến 10 giá trị có thể, kích thước phải là 1 byte – Lacek
@Lacek Bạn nói đúng! Tôi sẽ thay đổi câu trả lời từ 16 bit thành 1 hoặc 2 byte –
Trong bài viết này http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Fernando nhìn vào biểu diễn của loại Enum cho các truy vấn. Kết quả là trong khi sử dụng ENUM có vẻ hơi kém thanh lịch từ một quan điểm thiết kế (nếu giá trị ENUM của bạn thay đổi đôi khi), hiệu suất đạt được là hiển nhiên đối với các tập dữ liệu lớn. Xem bài viết của anh ấy để biết chi tiết. Bạn có đồng ý không?
- 1. Hiệu suất của MYSQL "IN"
- 2. Hiệu suất xem MySql
- 3. Lợi ích hiệu suất của đầu nối gốc Apache Tomcat
- 4. Hiệu suất xem MySQL
- 5. Bất kỳ sự bất lợi về hiệu suất của GC.disable?
- 6. PDO trong hiệu suất mysql
- 7. MySQL hàng đếm hiệu suất
- 8. mysql như hiệu suất tăng
- 9. Hiệu suất CSV và MySQL
- 10. Hiệu suất của Bộ đếm hiệu suất
- 11. Hiệu suất của Java Enums?
- 12. Hiệu suất Mysql trên bảng 6 triệu
- 13. MySQL hiệu suất truy vấn tiến thoái lưỡng nan: enum vs bảng
- 14. Hiệu suất của Fortran
- 15. thêm cột di tích MySQL hiệu suất
- 16. Hiệu suất mysql BIGINT so với INT
- 17. Hiệu suất MySQL DELETE hoặc UPDATE?
- 18. Hiệu suất của DataInputStream \ DataOutputStream
- 19. hiệu suất của ActiveRecord SessionStore
- 20. Mysql Query cải thiện hiệu suất
- 21. Mysql: Chèn hiệu suất INNODB vs MYISAM
- 22. Hiệu suất của StackFrame như thế nào?
- 23. Hiệu suất MySQL & biến tinh chỉnh
- 24. Hiệu suất Overhead của AOP
- 25. Hiệu suất của Arrays.asList
- 26. Hiệu suất của ArrayList
- 27. Hiệu suất của Interlocked.Increment
- 28. Hiệu suất của OracleBulkCopy
- 29. Hiệu suất của dynamic_cast?
- 30. Mysql kết nối liên tục và lợi thế của mysql_pconnect?
giá trị enum của tôi sẽ là những thứ như nhân khẩu học (W, B, A, H, O, U) Giới tính (M, F, U) và Bên (R, D, tôi, U) những thứ đó sẽ không bao giờ thay đổi. để chúng luôn có thể được mã hóa cứng vào logic ứng dụng của tôi. Vì vậy, truy vấn cho các giá trị thả xuống, và thay đổi cấu trúc không phải là lớn của một yếu tố. – gsueagle2008
"giá trị enum của tôi ... sẽ không bao giờ thay đổi". Sẽ ** yêu ** để có được một số số liệu thống kê về bao nhiêu lần tuyên bố đã được chứng minh là sai. – benmarks
Trong khi các dấu đầu dòng được liệt kê là đúng, ENUM vẫn nhanh hơn JOINS, đặc biệt nếu bạn đang sắp xếp theo cột đó. Đối với các cột như giới tính có giá trị đã đặt không thay đổi, tôi thích sử dụng ENUM. Nếu có ngay cả một khả năng từ xa mà bạn sẽ cần phải thêm hoặc loại bỏ các giá trị mặc dù, đi với một JOIN hoặc sử dụng một CHAR/VARCHAR/TINYINT và quản lý chúng ở cấp ứng dụng. Một điều khác ... MySQL không lưu trữ giá trị thực tế trong cột, chỉ một chỉ mục (INT), vì vậy bạn cũng có thể sử dụng chuỗi văn bản đầy đủ để hiển thị cho người dùng của bạn (ví dụ: Nam thay vì M) và lưu thêm mã hóa.;-) – Jabari