东莞沙田门户网站建设惠州做网络推广的
web/
2025/10/6 20:18:21/
文章来源:
东莞沙田门户网站建设,惠州做网络推广的,最好茶叶网站建设,昆明做网站找启搜网络目录表优化数据类型的选择避免列的值为NULLVARCHAR和CHAR日期和时间类型选择标识符#xff08;主键#xff09;的类型错误的表结构一张表中有太多列太多的关联适当建立冗余数据混用范式和反范式建立缓存表和汇总表参考表优化
此文章用于记录《高性能MySQL》一书的知识点。
…
目录表优化数据类型的选择避免列的值为NULLVARCHAR和CHAR日期和时间类型选择标识符主键的类型错误的表结构一张表中有太多列太多的关联适当建立冗余数据混用范式和反范式建立缓存表和汇总表参考表优化
此文章用于记录《高性能MySQL》一书的知识点。
数据类型的选择 避免列的值为NULL 查询包含值为NULL的列会使索引、索引统计和值比较更加复杂如果计划在列上建索引就应该尽量避免索引列含有NULL值 在保证足够的范围内选择最小、最简单的数据类型 更小的数据类型占用更少的磁盘、内存和CPU缓存、处理也更快 VARCHAR和CHAR VARCHAR需要适用1或2两个额外字节记录字符串长度适用于: 字符串列最大长度比平均长度大很多列更新少所以不用担心碎片问题使用了UTF-8等复杂字符集每个字符用不同字节数存储 CHAR适用的场景 经常变更的数据因为定长的CHAR不易产生碎片非常短的列CHAR不需要额外的字节因此存储空间更有效率 日期和时间类型 DATETIME 使用8字节不能自动根据时区转换TIMESTAMP 使用4字节值与时区有关会自动转换 通常情况下应尽量使用TIMESTAMP因为它的空间效率更高
选择标识符主键的类型
在满足足够的范围需求并且预留未来增长空间的前提下应选择最小、最简单的数据类型
整数通常是标识列最好的选择因为整数不仅快而且可以使用自增等特性应避免使用字符串作为标识列 原因 字符串更消耗空间同时比较时比数字类型慢随机的字符串如MD5、SHA1或者UUID插入新数据时会随机地插入到索引的不同位置导致页分裂、磁盘随机访问。
错误的表结构 一张表中有太多列 MySQL的存储引擎需要在服务器层与存储引擎层之间通过行缓冲格式拷贝数据然后在服务器层将缓冲内容解码成各个列。过多的列会导致上述过程转换代价过高。 太多的关联 如果希望查询执行快速且并发性好单个查询最好在12个表内做关联。
适当建立冗余数据 混用范式和反范式 范式化的表更新更快同时只有很少或没有重复的数据表更小但是查询时通常需要昂贵的关联操作可能导致部分索引失效而反范式会增加冗余数据但可以减少或避免关联操作。 建立缓存表和汇总表 案例统计某个表的总数时可以通过 SELECT COUNT(*) FROM table但次操作需要扫描表中大部分数据效率较低。可以通过建立汇总表来统计表中的数据数并在每次插入数据时更新汇总表中的数据。
参考
《高性能的MySQL》
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88093.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!