字符串类型()
一种绕过这种限制的方式是按照需要的顺序来定义枚举列另外也可以在查询中使用FIELD() 函数显式地指定排序顺序但这会导致MySQL 无法利用索引消除排序
如果在定义时就是按照字母的顺序就没有必要这么做了
然后我们用主键列关联这两个表下面是所使用的查询语句
mysql> SELECT SQL_NO_CACHE COUNT(*)
> FROM webservicecalls
> JOIN webservicecalls USING(day account service method)
我们用VARVHAR 和ENUM 分别测试了这个语句结果如表 所示
表 :连接VARCHAR和ENUM列的速度
从上面的结果可以看到当把列都转换成ENUM 以后关联变得很快但是当VARCHAR 列和ENUM 列进行关联时则慢很多在本例中如果不是必须和VARCHAR 列进行关联那么转换这些列为ENUM 就是个好主意这是一个通用的设计实践在查找表时采用整数主键而避免采用基于字符串的值进行关联
然而转换列为枚举型还有另一个好处根据SHOW TABLE STATUS 命令输出结果中Data_length 列的值把这两列转换为ENUM 可以让表的大小缩小/在某些情况下即使可能出现ENUM 和VARCHAR 进行关联的情况这也是值得的注同样转换后主键也只有原来的一半大小了因为这是InnoDB 表如果表上有其他索引减小主键大小会使非主键索引也变得更小稍后再解释这个问题
返回目录高性能MySQL
编辑推荐
ASPNET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
数据仓库与数据挖掘培训视频教程