微信公众平台一定要找网站做吗,只做动漫的网站,php网站链接数据库,今天株洲最新消息MySQL中的SET和ENUM数据类型均用于限制字段可接受的值范围#xff0c;但它们的设计用途和功能特性有所不同#xff1a; SET类型 - SET是一种集合类型#xff0c;它可以存储一组预定义的离散值#xff0c;并且在一个SET字段中可以同时存储多个值。
- SET字段内的值是互斥的…MySQL中的SET和ENUM数据类型均用于限制字段可接受的值范围但它们的设计用途和功能特性有所不同 SET类型 - SET是一种集合类型它可以存储一组预定义的离散值并且在一个SET字段中可以同时存储多个值。
- SET字段内的值是互斥的即同一时间不会存在相同的元素两次但可以有多个不同的元素组合。
- 值之间的分隔通常用逗号,或其他指定字符。
- SET类型的字段最大可以容纳64个不同的成员值。
- 在内部存储时MySQL将SET类型的值转换为位向量进行存储从而节省空间。
- SET类型适合那些需要记录多选情况的场景例如记录用户的兴趣爱好等。 ENUM类型 - ENUM是一种枚举类型它只能存储预定义的一组单个值。
- ENUM字段每次只能存储这组枚举值中的一个不允许同时存储多个枚举值。
- ENUM类型的值在声明时具有固定的顺序并且会被赋予一个索引值从1开始递增可以基于此索引值进行排序。
- ENUM类型的字段最大可以容纳65535个不同的枚举值。
- 同样在内部存储时MySQL将ENUM类型的值转换为一个整数对应值在枚举列表中的位置以便更高效地存储。 异同总结 - 相似之处 - 都是字符串类型但实际存储为数字。 - 都要求预先定义一个合法的值列表。 - 都用于限制字段可接受的值范围提高数据完整性。
- 不同之处 - SET可以存储多个值而ENUM只能存储一个值。 - SET类型的值不存在顺序关系而ENUM类型的值则具有顺序可以通过索引值排序。 - SET类型的字段可以用来表示多重状态ENUM更适合单一选择的状态标识。 - 内存和磁盘空间占用上由于存储机制不同对于存储多个值的情况SET相比多个ENUM字段更节省空间。
在设计数据库结构时根据实际需求来选择使用SET还是ENUM能够有效约束数据并优化存储效率。需要注意的是因为SET和ENUM类型的字段值受预先定义的集合限制修改或扩展这些集合可能会导致数据迁移问题所以在规划时应当充分考虑未来可能出现的变化。
超市购物清单的选择策略 想象一下光头强正在为熊二准备生日派对他手中有一张包含各种商品的购物清单要在超市里快速购买所有物品。超市有多个入口对应不同的表索引和货架布局对应表的数据结构。
场景一
购物清单上的商品大部分都是在零食区而零食区恰好有一个独立的入口且内部按类别有序排列。光头强可以选择从零食区入口进入逐项查找并放入购物车类似于利用索引高效检索数据。
场景二
若清单上的商品分散在超市各处而且没有明显的入口优势光头强可能决定从任意一个主入口进入然后逐一走过每个区域逐个对照清单查找商品类似于全表扫描。
光头强会在考虑以下因素后做出决策
- 购物清单上商品的位置集中度类似数据在表中的分布情况
- 各个入口通往商品的实际距离与时间消耗类似索引访问的I/O成本
- 按照货架顺序查找还是随机查找的效率类似数据检索方式
最后他会选择预计耗时最少、走动路径最短的策略进行购物这就是查询优化器选择执行计划的类比过程。