一、数据库结构优化(非常重要)

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性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...相关推荐

  1. Mysql数据库MMM实现高可用架构

    文章目录 一,MMM介绍 二.MMM搭建 一,MMM介绍 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障 ...

  2. MySQL 数据库之 MMM 高可用架构构建

    文章目录 一.MMM 概述 1. 什么是 MMM 2. 应用场景 3. MMM 特点 4. 关于 MMM 高可用架构的说明 5. 用户及授权 二.案例环境 1. 服务器配置 2. 服务器环境 3. 修 ...

  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 ...

  4. 《大型网站技术架构》-读书笔记四:高可用架构

    一.网站可用性的度量与考核 1.可用性度量:通常用多少个9来形容网站的可用性 2.可用性考核:可用性指标是网站架构设计的重要指标,对外是服务承诺,对内是考核指标.  二.高可用的网站架构 三.高可用的 ...

  5. mysql性能优化和高可用架构实践pdf_实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF...

    本篇的内容将会覆盖MySQL 5. 7数据库体系结构.InnoDB存储引擎.MySQL事务和锁.性能优化.服务器全面优化.性能监控.主从复制,以及PXC集群.MHA自动故障转移群集.MGR组复制.Ke ...

  6. TA大数据分析系统的高可用架构从设计到实现

    随着大数据时代的到来,对海量数据进行数据分析,并依据分析结果进行精细化运营成为各大企业的重要课题.但大数据行业门槛高,自建平台成本高.难度大.效率低,因此企业越来越需要专业的大数据分析工具. 针对市场 ...

  7. MySQL高可用架构

    MySQL学习笔记 一,高可用架构 对于一个企业来讲,设计一个高可用的架构非常重要,包括前端的高可用和后端数据库的高可用.企业业务每暂停一分钟,可能会造成大量的金钱流失,因此只有在整个架构的设计上足够 ...

  8. 面向业务的立体化高可用架构设计

    通常情况下我们在谈论高可用架构设计的时候,主要关注的是系统结构的高可用,例如主备架构.集群架构.多中心架构.我们做架构设计的时候,也主要是从系统结构本身出发,例如我们把单机改为双机.双机改为集群.单机 ...

  9. 【架构实战营】模块二 3.如何设计高可用架构?

    教学目标 理解高可用架构的复杂度本质 掌握高可用架构分析和设计 不要把所有鸡蛋都放到同一个篮子,放到多个篮子! 目录 高可用复杂度模型 计算高可用 存储高可用 1 高可用复杂度模型 高可用架构一般情况 ...

  10. 服务器又崩了?深度解析高可用架构的挑战和实践

    点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...

最新文章

  1. szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
  2. 关系型数据库与NOSQL
  3. 开发人员职位:对编程语言Python的需求明显下降
  4. 版本控制集中式与分布式的区别
  5. nutch mysql hadoop_nutch2.2.1+ hadoop1.2.1 + mysql5.6.13
  6. 勒索病毒攻击应急防范
  7. kettle连接mysql教程_kettle 连接 mysql8
  8. 安卓应用安全指南 4.5.1 使用 SQLite 示例代码
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的个人博客系统
  10. 云原生被热捧,是炒作还是大势所趋?
  11. Android分贝开发
  12. Axios 请求配置参数详解
  13. 原创 leetcode[349]两个数组的交集/ Intersection of Two Arrays 哈希策略
  14. mrtg监控短信报警 linux,[原]使用MRTG画图进行监控
  15. element table 无数据时显示图片替换“暂无该数据“
  16. SwitchNAT 测试
  17. Chrome PPAPI 开发环境
  18. 给学校开放计算机建议书30字,学生给学校建议书
  19. ROI Align原理及cuda源码阅读
  20. 几种编程语言的优缺点

热门文章

  1. 2.7创建签名密钥和证书
  2. DataFrame保存为excel的方法
  3. 接近真我真实如实呈现
  4. math: 判断两个向量之间夹角是逆时针或顺时针
  5. C++ 46.基于多态的职工管理系统(2)——创建职工类(创建职工抽象类、创建普通员工类、创建经理类、创建老板类)
  6. win7怎么修改计算机皮肤,Windows7系统是怎么修改UC浏览器的皮肤?
  7. Cha1-Breaking the Surface
  8. 国庆临近,节后端开发3+4面,springboot视频推流
  9. Kubernetes教程(一)---使用 kubeadm 创建 k8s 集群(containerd)
  10. [37期]猎鹰组战记