Varchar、Char或Binary以提高MySQL性能

Varchar、Char或Binary以提高MySQL性能,mysql,database,database-design,relational-database,varchar,Mysql,Database,Database Design,Relational Database,Varchar,我正在使用MySQL,我在一些地方读到,在索引列中使用CHAR比使用VARCHAR快20%。在其他地方,似乎只有当表没有任何VARCHAR列时,它才有好处。这是真的吗 我要存储的信息是GUID。如果数据库使用字符集utf8,将数据存储在二进制或字符中是更好的选择?每次我想按GUID插入、更新或查询筛选数据时,是否值得将数据转换为二进制文件?比起节省磁盘使用量,我更喜欢更快的数据访问 与可变宽度类型相比,任何固定宽度的列类型都有利于更快的查找操作。除非对表进行分区,否则即使在不涉及可变宽度类型的操

我正在使用MySQL,我在一些地方读到,在索引列中使用
CHAR
比使用
VARCHAR
快20%。在其他地方,似乎只有当表没有任何
VARCHAR
列时,它才有好处。这是真的吗


我要存储的信息是GUID。如果数据库使用字符集utf8,将数据存储在
二进制
字符
中是更好的选择?每次我想按GUID插入、更新或查询筛选数据时,是否值得将数据转换为
二进制文件?比起节省磁盘使用量,我更喜欢更快的数据访问

与可变宽度类型相比,任何固定宽度的列类型都有利于更快的查找操作。除非对表进行分区,否则即使在不涉及可变宽度类型的操作上,可变宽度类型也会降低性能。考虑到这一点,请仔细考虑当所有列都是固定宽度时,以及当某些列不是固定宽度时,如何迭代列中的所有值:

对于所有固定宽度的表(或分区),可以使用简单的指针算法,每次通过循环添加分区中所有列的组合数据宽度值


但是,如果存在任何可变宽度列,则需要根据列的实际磁盘“宽度”计算每次迭代要添加到指针的量

与可变宽度类型相比,任何固定宽度的列类型都有利于更快的查找操作。除非对表进行分区,否则即使在不涉及可变宽度类型的操作上,可变宽度类型也会降低性能。考虑到这一点,请仔细考虑当所有列都是固定宽度时,以及当某些列不是固定宽度时,如何迭代列中的所有值:

对于所有固定宽度的表(或分区),可以使用简单的指针算法,每次通过循环添加分区中所有列的组合数据宽度值


但是,如果存在任何可变宽度列,则需要根据列的实际磁盘“宽度”计算每次迭代要添加到指针的量

看看那些。看起来二进制会快一点。谢谢,使用二进制似乎更好,但真的比VARBINARY更好吗?将GUID转换为16字节长度的二进制文件或将其像34字节二进制文件一样保存更快吗?
BINARY
是存储GUID信息的最快方法,如果您要进行微优化的话
BINARY
vs
VARBINARY
-
BINARY
速度更快,因为MySQL不必计算它必须保存的实际长度,因为所有的
BINARY
列都是固定宽度的。然后,如果我有一个包含3列
VARCHAR
和一列
BINARY
的表,并且我按
BINARY
列进行查询筛选,那么它会更快吗?其他栏目都不重要?看看那些。看起来二进制会快一点。谢谢,使用二进制似乎更好,但真的比VARBINARY更好吗?将GUID转换为16字节长度的二进制文件或将其像34字节二进制文件一样保存更快吗?
BINARY
是存储GUID信息的最快方法,如果您要进行微优化的话
BINARY
vs
VARBINARY
-
BINARY
速度更快,因为MySQL不必计算它必须保存的实际长度,因为所有的
BINARY
列都是固定宽度的。然后,如果我有一个包含3列
VARCHAR
和一列
BINARY
的表,并且我按
BINARY
列进行查询筛选,那么它会更快吗?其他栏目都不重要?