19.优化数据库对象
19.1 优化表的数据类型
应用设计时需要考虑字段的类型和长度,并留有一定长度冗余。
procedure analyse()函数可以对表中列的数据类型提出优化建议。
procedure analyse()函数用法:
select * from 表名 procedure analyse(); -- 对所有列提出优化建议
select * from 表名 procedure analyse(16,256); -- 不对包含16至256取值的枚举列提出建议
分析的结果是针对每个列,输出该列的最小值、最大值、最小值长度、最大值长度、空字符串或0的个数、null的个数、平均值、方差、优化建议。
注意:该函数只对已存在的表,且包含大量记录时分析有效,这样的表对类型修改时一定要注意DDL锁表的问题。
该函数不能在设计阶段给出类型和长度建议。

19.2 通过拆分提高表的访问效率
对表拆分分为:垂直拆分和水平拆分。
垂直拆分指将主键和常用列放在一张表中(主表),将主键和非常用列放在另一张表中(从表)。
如果从表中除主键列意外所有列都是无效取值(空字符串、null、0),则不需要保存该行信息,所以从表的记录量比主表少,从而优化存储空间。
在查询时如果只从主表查找,则优化查询速度;如果要从主表和从表连接查找,则产生了left join。
并且拆表后主键同时存储在两张表中,增加的冗余,即增加了程序对冗余的管理和事务的管理。
水平拆分指根据一个列或多个列的数据值将数据存放到两个同构且独立的表中。
水平拆分适用场景:表很大,表中数据有独立性,需要把数据存放在多个介质上。
如果查询与分表的依据一致,则只需要在一个分表中执行,优化了速度。
如果查询与分表的依据不一致,则只需要在多个分表中执行并将结果union all在一起,增加了业务复杂度。
水平拆分需要考虑数据量的增长速度。

19.3 逆规范化
规范化保证数据的一致性、完整性,避免数据的冗余,不一致等。
规范化带来的问题是查询时可能产生多表关联,影响查询速度。
逆规范化指通过增加冗余列、派生列或重组表、分割表来提升查询速度,但需要应用程序来保证数据的一致性和完整性。
冗余列:指在多个表中具有相同的列,常用来避免连接查询。例如:给emp表增加dname列,则dname同时存在于emp表和dept表。
派生列:指该列可由其它列计算生成,常用来避免在查询中实时计算。例如:年龄=当前日期-出生日期,年薪=月薪*12。
重组表:指将用户需要查看的多个表连接的结果构造成一张表,常用来避免连接查询,缺点需要实时或定时从查询的多张表向该表同步数据。
分割表:指垂直分割和水平分割。
规范化带来的问题是数据的一致性、完整性不能保证,维护的方法分为:批处理存储过程实现、应用逻辑实现、触发器实现。
批处理存储过程实现:是指定期调用存储过程来更新冗余列、派生列、重组表、拆分表等信息。缺点:实时性不高。
应用逻辑实现:指应用程序在同一个事务内完成本业务和冗余列、派生列、重组表、拆分表的DML操作。缺点:业务逻辑复杂、开发难度大、容易遗漏、数据完整性风险大。
触发器实现:对数据的DML操作立即出发对冗余列、派生列、重组表、拆分表的DML操作,业务逻辑扩展简单、实时性高。缺点:数据库维护难度大,项目数据库迁移难度大。

19.4 使用中间表提高统计查询速度
指先复制业务表及其数据,然后在复制的表(中间表)上进行统计操作。
优点:不影响业务。
缺点:增加存储空间,有一个表和数据的复制过程。

19.5 小结
数据库设计是应用程序的基础,前期设计的好坏影响应用程序的整个生命周期及数据质量。
越到后期的数据库设计调整,对业务影响越大。

19.Mysql优化数据库对象的更多相关文章

  1. (1.13)mysql优化数据库对象

    (1.13)mysql优化数据库对象 1.mysql优化数据库对象 [1.1]数据库对象类型优化 select * from test1 procedure analyse(); ,); --不要为那 ...

  2. MySQL 优化数据库对象

    一.考虑是用 procedure analyse() 函数对当前应用的表进行分析.字段类型是否可优化. 二.通过拆分提高表的访问效率. (A) 针对MyISAM表,有两种拆分方法: 垂直拆分:主码和某 ...

  3. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

  4. MySQL优化(三):优化数据库对象

    二.优化数据库对象 1.优化表的数据类型 应用设计的时候需要考虑字段的长度留有一定的冗余,但不推荐很多字段都留有大量的冗余,这样既浪费磁盘空间,也在应用操作时浪费物理内存. 在MySQL中,可以使用函 ...

  5. mysql优化-数据库设计基本原则

    mysql优化-数据库设计基本原则 一.数据库设计三范式 第一范式:字段具有原子性 原子性是指数据库的所有字段都不可被再次划分,如下表就不满足原子性,起点与终点 字段就可被拆分为起点与终点两个字段. ...

  6. (5)MySQL进阶篇SQL优化(优化数据库对象)

    1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性 ...

  7. mysql优化-数据库优化、SQL优化

    我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) ...

  8. MySQL定义数据库对象之指定definer

    mysql创建view.trigger.function.procedure.event时都会定义一个Definer: SQL SECURITY 有两个选项,一个为DEFINER,一个为INVOKER ...

  9. [数据库系列之MySQL]Mysql优化笔记

    大型网站提速之MySql优化 数据库优化包括的方面 数据库优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使得数据库提高很多. 主要包括: 1.表的设计合理 ...

随机推荐

  1. 为什么使用DLL

    (1) 如果不同的程序使用相同的 DLL,只需将 DLL 在内存中装载一次,这样节省了系统内存.DLL 映射到每个进程(每运行一次应用程序)的专用地址空间中,但它们的代码使用的内存影像程序只在内存中装 ...

  2. Delphi中For In 语法应用实例

    一.遍历 TStrings var List: TStrings; s: string; begin List := TStringList.Create; List.CommaText := 'aa ...

  3. hadoop-1(单机模式配置)

    下一次的目标是: 把Hadoop的伪分布式配置出来 1:ssh免密码登陆第一步 2:安装java环境 3:安装hadoop2

  4. http://wenku.baidu.com/view/26afdb8371fe910ef12df8ccRevit采用DWG和FBX两种格式导入3D max方法的总结

        2.DWG 属性——导出为 ACIS 实体(如果选择导出为多边形网格,则将每个图元导出为 由多个多边形组成的对象,这些多边形相互连接或组成 “ 网格 ” .在导出到 DWG 文件以用 于 Ma ...

  5. Repeater - 重复器

    Repeater - 重复器,用来展示泛型集合中的数据 五大模板:1.HeaderTemplate - 头模板,加载时会在开始执行一次2.FooterTemplate - 脚模板,加载时会在最后执行一 ...

  6. Github好桑心,慢慢来吧,等待中

    等了大半天还是没办法注册,在线求助...

  7. 2018面向对象程序设计(Java) 第2周学习指导及要求

    2018面向对象程序设计(Java) 第2周学习指导及要求(2018.9.3-2018.9.9)   学习目标 适应老师教学方式,能按照自主学习要求完成本周理论知识学习: 掌握Java Applica ...

  8. tab template

    <div class="box"> <div class="box-body"> <div class="nav-tab ...

  9. C# 写App.config配置文件的方法

    private static void AccessAppSettings() { //获取Configuration对象 Configuration config = ConfigurationMa ...

  10. Git 远程仓库 更新url

    git remote -v 查看现有远程仓库的地址url 1. 修改命令git remote set-url origin <URL> 更换远程仓库地址.把<URL>更换为新的 ...