mysql - 将 ENUM 中定义的值在 MariaDB 中排序是否有任何性能优势?
问题描述
我认为标题是不言自明的。假设我们有这张表:
CREATE TABLE tickets (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
priority ENUM('c', 'a', 'b') NOT NULL
);
如果我对优先级 ENUM 中的值进行排序,它会获得任何性能吗?像这样:
priority ENUM('a', 'b', 'c') NOT NULL
解决方案
枚举按它们的索引号排序,而不是它们的值:
ENUM 值根据它们的索引号进行排序,这取决于枚举成员在列规范中列出的顺序。例如,对于 ENUM('b', 'a'),'b' 排在 'a' 之前。空字符串排在非空字符串之前,NULL 值排在所有其他枚举值之前。
所以实际的元素值对性能没有影响,因为 MySQL 在处理枚举时只处理数字(包括对它们进行排序):
您指定为输入值的字符串会自动编码为数字。有关 ENUM 类型的存储要求,请参见第 11.7 节,“数据类型存储要求”。
虽然没有性能优势,但以正确排序的顺序指定元素(不一定必须按字典顺序)具有order by enum_column
可能不会给您带来意外结果的好处。
推荐阅读
- android - Spinner android根据时间(月)更改项目
- javascript - 如何停止 setInterval 在案例块中运行
- python - 使用其键作为熊猫中的索引转换字典字典
- react-native - react-native-picker-select 正在关闭 iOS 中的值更改
- android - 当文档集合中的引用发生更改时,Firestore 侦听器不会触发
- java - 无法保存数据Realm Android
- swift - 视频像素化文本上的 CATextLayer
- sql - Oracle SQL - 平均函数的最大值
- csv - 连接填充了不同字段的 2 行
- oracle - 如何从另一个持有锁并导致死锁的会话中检查整个 pl/sql 堆栈信息