如何优化数据库对象

简介: MySQL的每一个操作几乎离不开数据表,对数据库对象的优化大到整张表,小到一个字符型,都可能对数据库性能起到出乎意外的惊喜。
优化表的数据类型
    应用设计的时候需要考虑字段长度留有一定冗余,但是不能留有大量的冗余。这样浪费磁盘存储空间,同时在应用程序操作时也浪费物理内存。
    数据类型 通常 更小的更好。一般应该尽可能使用能正确存储数据的最小数据类型,更小的数据类型通常更快,因为他们占用更少的磁盘、内存和CPU缓存,并且处理需要的CPU周期更少。
     整型比字符串操作代价更低,一般整型>字符串>时间

    在MySQL中 可以使用函数PROCEDURE ANALYSE()对当前应用的表进行分析
    语法 select * from tb1_name procedure analyse();
        输出的每一列信息都会对数据表中的列的数据类型提出优化建议
    select * from tb1_name procedure analyse(16,256);
        不要为那些包含的值多余16个或者256个字节的ENUM类型提出建议 
        如果没有这样的限制 输出信息可能很长 ENUM定义通产很难阅读

通过拆分提高表的访问效率
    MyISAM类型的表拆分
        1 垂直拆分 按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分,即把主码和一些列放到一个表 然后把主码和另外的列放到另一个表中。
            适用情况:一个表中的某些列常用,而另一些列不常用,则可以采用垂直拆分 
            优点:垂直拆分可以使得数据行变小,一个数据页就能存放更多的数据,减少I/O次数。这样使得数据模块更清楚,数据维护起来更方便。
            缺点:需要管理冗余列,查询所有数据需要联合操作,有些查询无法再数据库层面解决,如果依然有大表造成的性能问题,解决不了。并且切分到一定程度的话,扩展性就会遇到限制。过度切分可能会带来系统过渡复杂而难以维护。
        2 水平拆分 将某个访问极其频繁的表再根据一列或多列数据的某种规则来分散到多个独立表之中,每个表中包含一部分数据。
            适用情况:
                1 表很大 分割后可以降低在查询时需要读的数据和索引的页数 同时也降低了索引的层数提高查询速度
                2 表中的数据本来就有独立性
                3 需要把数据存放到多个介质上

逆规范化
    数据库规范化越高 产生的关系越多 关系过多的直接结果就是导致表之间的连接操作越繁琐 而表之间的连接操作室性能较低的操作 直接影响到查询的速度 所以 对于查询较多的应用 就需要根据实际情况运用逆规范化对数据进行设计 通过逆规范化来提高查询的性能
    反规范的好处是降低连接操作的需求降低外码和索引的数据 还可能减少表的数目 相应带来的问题是可能出现数据的完整性问题 加速查询速度 但会降低修改速度
    使用反规范要仔细分析应用的数据存取需求和实际的性能特点 能用索引和其他方法解决问题就不使用反规范
    常用反规范方法
        1 增加荣誉列 在表中具有相同列 他常用来在查询时避免连接操作
        2 增加派生列 增加的列来自其他表中的数据 由其他表中的数据经过计算生成 增加的派生列 其作用是在查询时减少连接操作 避免使用集函数
        3 重新组表  如果许多用户需要查看两个表连接出来的结果数据 则把这两个表重新组成一个表来减少连接而提高性能
        4 分割表 水平分割和垂直分割
    管理和维护数据的完整性的常用方法
        1 批处理维护是指对复制列或派生列的修改积累一定时间后运行一批处理作业或存储过程对复制或派生列进行修改 这只能在对实时性要求不高的情况下使用
        2 数据的完整性也可由应用逻辑来实现 这就要求必须在同一事物中对所有涉及的表进行增删改操作 而应用逻辑来实现数据的完整性分先较大 因为统一逻辑必须在所有的应用中使用和维护 容易遗漏特别是在需求变化时 不易于维护
        3 触发器 对数据的任何修改立即触发对复制列或派生列的相应修改 触发器是实时的 而相应的处理逻辑只在一个地方出现 易于维护 一般来说 是解决此类问题比较好的办法

使用中间表提高查询速度
    场景 在数据量较大的表 在其上进行查询通常会效率很低 并且还要考虑统计查询是否会对在线的应用产生负面影响 
    优点
        1 中间表复制源表部分数据 并且与源表相隔离 在中间表上做统计查询不会对在线应用产生负面影响
        2 中间表上可以灵活地添加索引或者增加临时用的新字段 从而达到提高统计查询效率和辅助统计查询作用

目录
相关文章
|
3天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
23 11
|
23天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
23天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
1月前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
1月前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
47 4
|
1月前
|
SQL druid 数据库
如何进行数据库连接池的参数优化?
数据库连接池参数优化包括:1) 确定合适的初始连接数,考虑数据库规模和应用需求;2) 调整最大连接数,依据并发量和资源状况;3) 设置最小空闲连接数,平衡资源利用和响应速度;4) 优化连接超时时间,确保系统响应和资源利用合理;5) 配置连接有效性检测,定期检查连接状态;6) 调整空闲连接回收时间,适应访问模式并配合数据库超时设置。
|
1月前
|
SQL 缓存 监控
数据库优化
【10月更文挑战第29天】数据库优化
39 1
|
1月前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
107 1
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
249 1
|
26天前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
下一篇
DataWorks