如果我在mysql的较大表中将字段类型从varchar更改为char,它将如何影响数据库
我已经存在一个数据库,其中主键作为varchar类型存在于一个表中。 我发现这会降低查询性能。现在我想将数据类型从varchar更改为char。我的问题是,如果我更改表,它将如何影响整个数据库请注意,表中现在存储了300多万条记录。 有什么我需要担心的吗。 提前感谢您的帮助和建议 ,这里是重要的如果我在mysql的较大表中将字段类型从varchar更改为char,它将如何影响数据库,mysql,sql,Mysql,Sql,我已经存在一个数据库,其中主键作为varchar类型存在于一个表中。 我发现这会降低查询性能。现在我想将数据类型从varchar更改为char。我的问题是,如果我更改表,它将如何影响整个数据库请注意,表中现在存储了300多万条记录。 有什么我需要担心的吗。 提前感谢您的帮助和建议 ,这里是重要的 截断。 对于VARCHAR列,无论使用何种SQL模式,超过列长度的尾随空格在插入之前都会被截断,并生成警告 对于CHAR列,不管SQL模式如何,都会以静默方式执行从插入值中截断多余尾随空格的操作
- 截断。
- 对于VARCHAR列,无论使用何种SQL模式,超过列长度的尾随空格在插入之前都会被截断,并生成警告
- 对于CHAR列,不管SQL模式如何,都会以静默方式执行从插入值中截断多余尾随空格的操作
- 填充物。
- 存储CHAR值时,会使用空格右键填充到指定的长度。检索字符值时,将删除尾随空格
- VARCHAR值在存储时不进行填充。根据标准SQL,在存储和检索值时保留尾随空格
ALTER TABLE whatever
DROP PRIMARY KEY,
ADD COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
确保更改引用此表的所有表以使用新键。对于您的应用程序来说,
char
比varchar
更好吗?主键的数据格式是什么?请注意,通常在任何DBMS中更改键列的类型都需要重新创建表,这是一项非常昂贵的操作,尽管重新创建表所需的时间取决于每行的大小和表上存在的索引。“我发现这会降低查询性能。”---您是如何发现的?char将比varchar占用更多的空间,但如果它是一个键,则不会对查询产生任何速度差异。主键搜索无论类型如何都会很快,尽管int可能比任何字符串类型都快。我们使用了主键的id生成公式。对于每个id,我们从子字符串中检索最大值,并用1递增。然后插入记录。我希望如果我使用char-type,那么这个操作的性能会有一点提高,还可以选择joinquery。我走对了吗?