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 小结
数据库设计是应用程序的基础,前期设计的好坏影响应用程序的整个生命周期及数据质量。
越到后期的数据库设计调整,对业务影响越大。
19.Mysql优化数据库对象的更多相关文章
- (1.13)mysql优化数据库对象
(1.13)mysql优化数据库对象 1.mysql优化数据库对象 [1.1]数据库对象类型优化 select * from test1 procedure analyse(); ,); --不要为那 ...
- MySQL 优化数据库对象
一.考虑是用 procedure analyse() 函数对当前应用的表进行分析.字段类型是否可优化. 二.通过拆分提高表的访问效率. (A) 针对MyISAM表,有两种拆分方法: 垂直拆分:主码和某 ...
- MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象
我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...
- MySQL优化(三):优化数据库对象
二.优化数据库对象 1.优化表的数据类型 应用设计的时候需要考虑字段的长度留有一定的冗余,但不推荐很多字段都留有大量的冗余,这样既浪费磁盘空间,也在应用操作时浪费物理内存. 在MySQL中,可以使用函 ...
- mysql优化-数据库设计基本原则
mysql优化-数据库设计基本原则 一.数据库设计三范式 第一范式:字段具有原子性 原子性是指数据库的所有字段都不可被再次划分,如下表就不满足原子性,起点与终点 字段就可被拆分为起点与终点两个字段. ...
- (5)MySQL进阶篇SQL优化(优化数据库对象)
1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性 ...
- mysql优化-数据库优化、SQL优化
我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) ...
- MySQL定义数据库对象之指定definer
mysql创建view.trigger.function.procedure.event时都会定义一个Definer: SQL SECURITY 有两个选项,一个为DEFINER,一个为INVOKER ...
- [数据库系列之MySQL]Mysql优化笔记
大型网站提速之MySql优化 数据库优化包括的方面 数据库优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使得数据库提高很多. 主要包括: 1.表的设计合理 ...
随机推荐
- getElementsByTagName
1.getElementsByTagName * document.getelementByID(id名称)* 通过id名称获取元素,它只有一个主语,docment(整个文档)** getElemne ...
- linux下搭建生成HLS所需的.ts和.m3u8文件
要想利用HLS来实现视频的在线播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 在Mac下,苹果提供了streamingTools的工具,里面有mediafi ...
- C# 反射赋值
tb_Projects model = new tb_Projects(); model.OwnerId = ; string FieldName = "OwnerId";//字段 ...
- nginx优化——包括https、keepalive等
一.nginx之tcp_nopush.tcp_nodelay.sendfile 1.TCP_NODELAY你怎么可以强制 socket 在它的缓冲区里发送数据?一个解决方案是 TCP 堆栈的 TCP_ ...
- div下面多个a标签的点击事件,并且获取a的属性
$('.fensiselect').on('click','a',function(){ var id= $(this).attr('fanid'); alert(id) })
- ajax-》post
1:最近写完前端,又写后端,jQuery的ajax已经用烂了,事实证明的确好用,再分享一下. data是后台echo的值,可以是数字,也可以是数组,用json_encode()包裹数组形式,前端接收要 ...
- python添加到环境变量
1.命令 vi ~/.bashrc export PATH="/home/tiany/software/python/python3/3.6.1/bin:$PATH" export ...
- Failed to acquire connection "SAP_PRD_NEW.SAPSR3". Connection may not be configured correctly or you may not have the right permissions
SQLSERVER JOB无法执行 错误提示: Message Executed as user: WORKGROUP\NSDZHSCMFP01$. Microsoft (R) SQL Server ...
- document.all 在各浏览器中的支持不同
转载:https://blog.csdn.net/fengweifree/article/details/16862495 感谢 all 方法最初是由 IE 浏览器拥有的,并不属于 W3C 规范范畴, ...
- java并发:jdk1.8中ConcurrentHashMap源码浅析
ConcurrentHashMap是线程安全的.可以在多线程中对ConcurrentHashMap进行操作. 在jdk1.7中,使用的是锁分段技术Segment.数据结构是数组+链表. 对比jdk1. ...