19.Mysql优化数据库对象

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

原文地址:https://www.cnblogs.com/BradMiller/p/10123402.html

时间: 2024-11-08 22:45:25

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

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

我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `money` double(8,2) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_date` datetime(3) DEFAULT NULL

MySQL之数据库对象查看工具mysqlshow

mysqlshow:数据库对象查看工具,用来快速查找存在哪些数据库.数据库中的表.表中的列或索引. 选项:--count    显示数据库和表的统计信息 -k         显示指定的表中的索引 -i         显示表的状态信息 不带任何参数显示所有数据库 [[email protected] mysql-5.6.30]# mysqlshow +--------------------+ |     Databases      | +--------------------+ | in

《深入浅出Mysql》——第三篇 优化篇 第十七章 常用SQL技巧和常见问题 + 第十八章 SQL优化 + 第十九章 优化数据库对象

可以利用这个函数与ORDER BY子句一起完成随机抽取某些行的功能.它的原理其实 就是ORDER BY RAND()能够把数据随机排序. 加索引 CHECK TABLE 也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在,举例如 下. 原文地址:https://www.cnblogs.com/JasonPeng1/p/12234426.html

Mysql 优化 -- 数据库结构

以下内容仅针对Mysql InnoDB引擎.内容主要来自Mysql 5.6版本Reference Manual. 1 优化数据结构设计 针对表结构进行仔细的设计是十分必要的,因为紧凑的数据结构设计能够显著地减少在磁盘交互时所需要交换的数据量.内存中所需的空间大小.以及,能够相应地减少索引所占的空间.总之,对数据结构进行优化设计能够从速度及空间两方面得到提升,从而提升性能. 1.1 列设计 在满足需求的情况下,只使用能够满足需求(尽量小)的数据类型.例如,MEDIUMTEXT类型占用3个字节(-8

19 MySQL概念 数据库 数据表 数据类型 增加删除修改查询 WHERE Order By Limit

数据库管理系统DBMS 数据库中相关概念 数据库 数据表 记录 字段 数据 登录和退出MySQL客户端 查询自己的MySQL服务器有几个数据库 二.退出MySQL客户端的命令 修改root用户的密码 在MySQL客户端来修改密码(当前账号的密码) 数据库操作 创建数据库 显示所有数据库 删除数据库 选择数据库 更改数据库默认字符集 数据表操作 显示当前数据库中的所有表 创建数据表 显示表的创建 列的常用属性 修改数据表 删除数据表 显示表结构 MySQL数据类型 整型 浮点型 字符型 文本型 日

Mysql查看数据库对象(SQL命令总结)

数据的对象包括表,视图,触发器,等等(查看统计信息的必须进入information_schema 数据库) 举例查看表相关的信息,步骤如下 1.使用information_schema 数据库 use information_schema; 2.查询所有数据的大小(MB): select concat(round(sum(data_length/1024/1024),2),'MB') as data_size from tables; 3.查看指定数据库(schema)的大小(MB): sele

优化数据库对象

procedure analyse() 优化表的数据类型 使用procedure analyse()对当前应用的表进行分析 select * from table_name procedure analyse(); select * from table_name procedure analyse(16,256); 第二个语句告诉procedure analyse()不要为那些包含的值多余16个或者256个字节的ENUM类型提出建议 select * from rental procedure

mysql 优化扩展

一.SQL 优化 1.分析和定位策略 1.通过 show status 了解各种 SQL 的执行频率 2.定位执行效率低的 SQL 语句:①通过慢日志定位:②使用 show processlist 命令查看当前在进行的线程 3.通过 explain 分析低效 SQL 4.通过 show profile 分析 SQL 5.通过 trace 分析优化器的选择 2.优化 1.大批量插入数据,使用如下方式能快速导入大量数据(在 myisam 引擎下速度更为显著): alter table 表名 disa

MYSQL学习笔记——数据库范式及MYSQL优化整体思路

一.数据库范式                                                                               为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 1.1.第一范式(1NF:每一列不可包含多个值)      所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列