gpt4 book ai didi

mysql - 在 InnoDB 表上使用可变长度列会减慢选择速度吗?

转载 作者:可可西里 更新时间:2023-11-01 08:00:22 25 4
gpt4 key购买 nike

MyISAM 在表上具有可变长度列(varchar、blob)确实减慢了查询速度,因此我在网上遇到了将 varchar 列移动到单独表中的建议。

这仍然是 InnoDB 的问题吗?我不是说在表中引入许多 varchar 行会导致页面拆分的情况。我的意思是你是否应该考虑,例如,将 post_text(表中的单个 BLOB 字段)移动到另一个表中,从性能方面讲 InnoDB?

最佳答案

据我所知,BLOB(和 TEXT)实际上存储在表外,VARCHAR 存储在表中。

VARCHAR 不利于读取性能,因为每条记录的长度都是可变的,这使得在记录中查找字段的成本更高。BLOB 很慢,因为必须单独获取值,并且很可能需要从磁盘或缓存中再次读取。

据我所知,InnoDB 在这方面没有做任何不同的事情,所以我假设性能特征保持不变。

我不认为移动 BLOB 值真的有帮助 - 除了减少整体表大小之外无论如何都会对性能产生积极影响。VARCHAR 是另一回事。你一定会在这里受益。如果您的所有列都具有定义的长度(我猜这意味着您也不能使用 BLOB?),则字段查找会更快。

如果您只是“阅读”VARHCAR 和 BLOB 字段,我认为这值得一试。但是,如果您的选择查询需要比较来自 VARCHAR 或 BLOB 的值,那您就很不爽了。

所以是的,你肯定可以在这里获得性能,但请确保你测试你确实获得了性能,并且这种提高值得积极的非规范化。

附言。

“优化”VARCHAR 读取性能的另一种方法是简单地将它们替换为 CHAR 字段(固定长度)。只要磁盘空间的增加是可以接受的,这就可以提高读取性能。

关于mysql - 在 InnoDB 表上使用可变长度列会减慢选择速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com