Schema与数据类型优化的案例
发布时间:2022-02-18 14:38:39 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下Schema与数据类型优化的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 4.2MySQL schema设计中的陷阱 1、太多的列 MySQL存储引擎api工作时需要在服务器层和存储引擎层通过行缓冲格式拷贝数据,然后在服务器层将缓
小编给大家分享一下Schema与数据类型优化的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 4.2MySQL schema设计中的陷阱 1、太多的列 MySQL存储引擎api工作时需要在服务器层和存储引擎层通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列,从行缓冲中将编码过的列转换成行数据的操作代价高,myisam定长行与服务器行结构正好匹配,不需要转换;但是变长行结构 InnoDB的行结构总是需要转换,转换代价依赖于列的数量。 2、太多的关联 实体-属性-值EAV:糟糕的设计模式,mysql限制了每个关联操作最多只能有61张表,但EAV数据库需许多自关联;一个粗略的经验法则,如果希望查询执行得快速且并发性好,单个查询最好在12个表内做关联; 3、 非此发明not invent here的null 建议存空值可以用0、特殊值、空字符串代替,尽量不要null;但是不要走极端,在某些场景下、使用null会更好: create table ……( //全0 (不可能的日期)会导致很多问题 dt datetime not null default '0000-00-00 00:00:00' …… ) MySQL会在索引中存储null值,Oracle不会 4.3范式与反范式 4.3.1优缺点 1、范式化的更新操作更快 2、当数据较好地范式化时,很少有重复数据,只需要修改更少的数据 3、范式化的表更小,可更好地放到内存里,执行操作更快 4、很少冗余数据,检索列表数据时更少需要distinct、group by语句 缺点: 需要关联,有代价且可能使索引无效 4.3.2反范式的优点和缺点 避免关联,数据比内存大可能比关联要快很多(避免了随机I/O) 4.4缓存表和汇总表 缓存表: 对优化搜索和检索查询语句很有效, 存储那些可以较简单地从其他表获取数据(每次获取速度比较慢)的表 汇总表:保存使用group by语句聚合数据的表 使用时决定是实时维护数据还是定期重建,定期重建:节省资源、碎片少、顺序组织的索引(高效) 重建时,保证数据在操作时依然可用,通过“影子表”来实现,影子表:一张在真实表背后创建的表,在完成建表操作后,可通过原子的重命名操作切换影子表和原表。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |