当前位置:  开发笔记 > 后端 > 正文

为什么ENUM优于INT

如何解决《为什么ENUM优于INT》经验,为你挑选了2个好方法。

我刚刚在我的一张桌子上跑了一个"PROCEDURE ANALYZE()".我有这个类型为INT的列,它只包含0到12之间的值(类别ID).MySQL说我会更好用ENUM('0','1','2',......,'12').这个类别基本上是静态的,将来不会改变,但如果他们这样做,我可以改变该列并将其添加到ENUM列表中......

那么为什么ENUM在这种情况下更好?

编辑:我最感兴趣的是这个性能方面......



1> Mez..:

简而言之,这是因为它以不同的方式编入索引.

在这种情况下,ENUM说"这是这13个值中的一个",INT而是说"它可以是任何整数".

这意味着索引更容易,因为它不必考虑您不使用"以防万一"的那些整数的索引.

这与算法有关.

我会感兴趣的是,当它达到一个INT比它快的时候ENUM.

在一个中使用数字ENUM可能有点危险......好像你将这个数字不加引号发送给SQL - 你最终可能会得到错误的值!



2> Gary Richard..:

哎呀!在ENUM字段中使用数字有很多含糊之处.小心.我记得的一个问题是你可以ENUMS通过索引访问值:如果你的枚举是ENUM('A', 'B', 'C', '1', '2, '3'),那么这两个查询是非常不同的:

INSERT INTO TABLE (example_col) VALUES( '1' ); -- example_col == 1
INSERT INTO TABLE (example_col) VALUES(  1  ); -- example_col == A

我假设推荐是因为它限制了可以进入表的有效值.例如,插入13应该是默认选择.

一个更好的选择是使用TINYINT而不是INT.一个UNSIGNED TINYINT的范围为0〜255,只需要1个字节来存储.一个INT需要4个字节来存储.如果要约束进入表的值,可以添加ON INSERTON UPDATE触发检查值.

如果您担心ENUM和之间的性能差异TINYINT,您可以随时进行基准测试以查看不同的信息.这篇文章似乎有些相关.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有