ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一、数据库结构优化(非常重要)
1.1 数据库结构优化目的
1、减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余;
2、尽量避免数据维护中出现更新,插入和删除异常:
总结:要避免异常,需要对数据库结构进行范式化设计。
3、节约数据存储空间。
4、提高查询效率。
1.2 数据库结构设计步骤
1、需求分析:全面了解产品设计的存储需求、数据处理需求、数据安全性与完整性;
2、逻辑设计(重要):设计数据的逻辑存储结构。数据实体之间的逻辑关系,解决数据冗余和数据维护异常。数据范式可以帮助我们设计;
3、物理设计:表结构设计,存储引擎与列的数据类型;
4、维护优化:索引优化、存储结构优化。
1.3 数据库范式设计与反范式化
1.4 物理设计
f="https://segmentfault.com/a/1190000010012140">相关传送门:MySQL中字段类型与合理的选择字段类型;int(11)最大长度是多少?,varchar最大长度是多少
二、高可用架构设计
2.1 读写分离
三、数据库索引优化(非常重要)
3.1 两种主要数据结构:B-tree和Hash
3.1.1 B-tree结构
B-tree索引的限制:
3.1.2 Hash结构
Hash索引的限制:Hash索引必须进行二次查找
Hash索引无法用于排序
Hash索引不支持部分索引查找也不支持范围查找
Hash索引中Hash码的计算可能存在Hash冲突,不适合重复值很高的列,如性别,身份证比较合适。
3.1.3 MySQL常见索引和各种索引区别
PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`)
INDEX(普通索引) ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
FULLTEXT(全文索引) ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
组合索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )普通索引:最基本的索引,没有任何限制
唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它 是一种特殊的唯一索引,不允许有空值。
全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
3.2 使用索引好处和索引缺陷
3.2.1 为什么要使用索引
1、索引大大减少了存储引擎需要扫描的数据量;
2、索引可以帮助我们进行排序以避免使用临时表;
3、索引可以把随机I/O变为顺序I/O。
3.2.2 索引不是越多越好
1、索引会增加写操作的成本;
2、太多的索引会增加查询优化器的选择时间。索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,而有500页是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的。
3.3 索引优化策略
3.3.1 索引列上不能使用表达式和函数
3.3.2 前缀索引和索引列的选择性Innodb索引列最大宽度为667个字节(utf-8 差不多255个字符),MyIsam索引类宽度最大为1000个字节,于是出现前缀索引,索引的选择性。
对于列的值较长,比如BLOB、TEXT、VARCHAR,就必须建立前缀索引,即将值的前一部分作为索引。这样既可以节约空间,又可以提高查询效率。但无法使用前缀索引做 ORDER BY 和 GROUP BY,也无法使用前缀索引做覆盖扫描。
语法: ALTER TABLE table_name ADD KEY(column_name(prefix_length))
如何选择索引列的顺序:
1、经常会被使用到的列优先(选择性差的列不适合,如性别,查询优化器可能会认为全表扫描性能更好);
2、选择性高的列优先;
3、宽度小的列优先(一页中存储的索引越多,降低I/O,查找越快);
3.3.3 组合/联合索引策略
3.3.4 覆盖索引策略
跟组合索引有点类似,如果索引包含所有满足查询需要的数据的索引则成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作。即索引的叶子节点上面包含了他们索引的数据(hash索引不可以)。
判断标准:使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询。
优点:
1、可以优化缓存,减少磁盘IO操作;
2、可以减少随机IO,变随机IO操作变为顺序IO操作;
3、可以避免对InnoDB主键索引的二次查询;
4、可以避免MyISAM表进行系统调用;
无法使用覆盖索引的情况:
1、存储引擎不支持覆盖索引;
2、查询中使用了太多的列(如SELECT * );
3、使用了双%号的like查询(底层API所限制);
3.3.5 SQL索引优化总结口诀(套路重点)全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上不计算,范围之后全失效;
LIKE百分写最右,覆盖索引不写 *;
不等空值还有or,索引失效要少用;
字符单引不可丢,SQL高级也不难 ;
3.4 使用索引来优化查询
3.4.1 利用索引排序
1、group by 实质是先排序后分组,遵照索引的最佳左前缀。;
2、索引中所有列的方向(升序、降序)和Order By子句完全一致;
3、当无法使用索引列,增大max_length_for_sort_data参数的设置+增大sort_buffer_size参数的设置;
4、如果最左列使用了范围,则排序会失效;
5、where 高于having,能写在where限定的条件就不要去having去限定了
3.5 索引的维护和优化
3.5.1 删除重复索引
注:主键约束相当于(唯一约束 + 非空约束)
一张表中最多有一个主键约束,如果设置多个主键,就会出现如下提示:Multiple primary key defined!!!
3.5.2 删除冗余索引
检查工具:pt-duplicate-key-checkerexplain 查询计划Using where:表示优化器需要通过索引回表查询数据;
Using index:表示直接访问索引就足够获取到所需要的数据,不需要通过索引回表,如覆盖索引;
ref="https://zhuanlan.zhihu.com/p/74826503">下一篇:MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇原作者::唐成勇
原文链接:人类身份验证 - SegmentFault
原出处:思否
ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...相关推荐
- Mysql数据库MMM实现高可用架构
文章目录 一,MMM介绍 二.MMM搭建 一,MMM介绍 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障 ...
- MySQL 数据库之 MMM 高可用架构构建
文章目录 一.MMM 概述 1. 什么是 MMM 2. 应用场景 3. MMM 特点 4. 关于 MMM 高可用架构的说明 5. 用户及授权 二.案例环境 1. 服务器配置 2. 服务器环境 3. 修 ...
- mysql5.7 高可用_基于MySQL 5.7多源复制及Keepalived搭建三节点高可用架构
导读 基本环境准备 使用Centos 6.X 64位系统 MySQL 使用 MySQL-5.7.17-x86_64 版本,去官方下载mysql-5.7.17-linux-glibc2.5-x86_64 ...
- 《大型网站技术架构》-读书笔记四:高可用架构
一.网站可用性的度量与考核 1.可用性度量:通常用多少个9来形容网站的可用性 2.可用性考核:可用性指标是网站架构设计的重要指标,对外是服务承诺,对内是考核指标. 二.高可用的网站架构 三.高可用的 ...
- mysql性能优化和高可用架构实践pdf_实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF...
本篇的内容将会覆盖MySQL 5. 7数据库体系结构.InnoDB存储引擎.MySQL事务和锁.性能优化.服务器全面优化.性能监控.主从复制,以及PXC集群.MHA自动故障转移群集.MGR组复制.Ke ...
- TA大数据分析系统的高可用架构从设计到实现
随着大数据时代的到来,对海量数据进行数据分析,并依据分析结果进行精细化运营成为各大企业的重要课题.但大数据行业门槛高,自建平台成本高.难度大.效率低,因此企业越来越需要专业的大数据分析工具. 针对市场 ...
- MySQL高可用架构
MySQL学习笔记 一,高可用架构 对于一个企业来讲,设计一个高可用的架构非常重要,包括前端的高可用和后端数据库的高可用.企业业务每暂停一分钟,可能会造成大量的金钱流失,因此只有在整个架构的设计上足够 ...
- 面向业务的立体化高可用架构设计
通常情况下我们在谈论高可用架构设计的时候,主要关注的是系统结构的高可用,例如主备架构.集群架构.多中心架构.我们做架构设计的时候,也主要是从系统结构本身出发,例如我们把单机改为双机.双机改为集群.单机 ...
- 【架构实战营】模块二 3.如何设计高可用架构?
教学目标 理解高可用架构的复杂度本质 掌握高可用架构分析和设计 不要把所有鸡蛋都放到同一个篮子,放到多个篮子! 目录 高可用复杂度模型 计算高可用 存储高可用 1 高可用复杂度模型 高可用架构一般情况 ...
- 服务器又崩了?深度解析高可用架构的挑战和实践
点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...
最新文章
- szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
- 关系型数据库与NOSQL
- 开发人员职位:对编程语言Python的需求明显下降
- 版本控制集中式与分布式的区别
- nutch mysql hadoop_nutch2.2.1+ hadoop1.2.1 + mysql5.6.13
- 勒索病毒攻击应急防范
- kettle连接mysql教程_kettle 连接 mysql8
- 安卓应用安全指南 4.5.1 使用 SQLite 示例代码
- 基于JAVA+SpringBoot+Mybatis+MYSQL的个人博客系统
- 云原生被热捧,是炒作还是大势所趋?
- Android分贝开发
- Axios 请求配置参数详解
- 原创 leetcode[349]两个数组的交集/ Intersection of Two Arrays 哈希策略
- mrtg监控短信报警 linux,[原]使用MRTG画图进行监控
- element table 无数据时显示图片替换“暂无该数据“
- SwitchNAT 测试
- Chrome PPAPI 开发环境
- 给学校开放计算机建议书30字,学生给学校建议书
- ROI Align原理及cuda源码阅读
- 几种编程语言的优缺点
热门文章
- 2.7创建签名密钥和证书
- DataFrame保存为excel的方法
- 接近真我真实如实呈现
- math: 判断两个向量之间夹角是逆时针或顺时针
- C++ 46.基于多态的职工管理系统(2)——创建职工类(创建职工抽象类、创建普通员工类、创建经理类、创建老板类)
- win7怎么修改计算机皮肤,Windows7系统是怎么修改UC浏览器的皮肤?
- Cha1-Breaking the Surface
- 国庆临近,节后端开发3+4面,springboot视频推流
- Kubernetes教程(一)---使用 kubeadm 创建 k8s 集群(containerd)
- [37期]猎鹰组战记