我正在使用MySQL而且我在某些地方阅读,在索引列中使用CHAR
比使用VARCHAR
快20%。在其他地方似乎只有在表没有任何VARCHAR
列时才能获益。这是真的吗?
我想要存储的信息是GUID。如果数据库使用字符集utf8,更好的选项是将数据存储在BINARY
还是CHAR
中?每当我想通过GUID进行插入,更新或查询过滤时,我的数据是否值得转换为BINARY
?我更喜欢比节省磁盘使用更快的数据访问。
答案 0 :(得分:4)
与可变宽度类型相比,任何固定宽度的列类型都有助于更快的搜索操作。除非您的表是分区的,否则即使在不涉及它们的操作上,可变宽度类型也会降低性能。为了考虑,请考虑算法,当所有列都是固定宽度时,如果迭代列中的所有值,然后当有些列不是时,请如何迭代:
对于所有固定宽度的表(或分区),您可以使用简单的指针算法,每次在循环中添加分区中所有列的组合数据宽度值。
但是,如果存在任何可变宽度列,则需要根据列的实际磁盘“宽度”计算每次迭代时添加到指针的数量。