优化,谝一谝。查询优化、索引优化、库表结构优化需要齐头并进,一个不落。并且关系型数据库和非关系型数据库肯定都涉及到了优化:
PART1:关系型数据库优化:以MySQL为例
- 咱们整体的Sql 调优思路:
- 表结构优化
- 1。拆分字段
- 2.字段类型的选择
- 3.字段类型大小的限制
- 4.合理的增加冗余字段
- 5.新建字段一定要有默认值
- 索引方面
- 1.索引字段的选择
- 2.利用好mysql支持的索引下推,覆盖索引等功能
- 3.唯一索引和普通索引的选择
- 查询语句方面
- 1.避免索引失效
- 2.合理的书写where条件字段顺序
- 3.小表驱动大表
- 4.可以使用force index()防止优化器选错索引
- 分库分表
- 表结构优化
在获得编写MySQL查询的经验的同时,也将学习到如何为高效的查询设计表和索引。同样的,也可以学习到在优化库表结构时会影响到哪些类型的查询。
一般咱们经常接触到的性能相关的服务请求是下面三个:
- 如何确认服务器是否达到了性能最佳的状态
- 找出某条语句为什么执行不够快
- 一条 Sql 语句查询一直慢会是什么原因:
- 一条 Sql 语句查询偶尔慢会是什么原因?
- 一条 Sql 语句查询一直慢会是什么原因:
- 以及诊断被用户描述成“停顿”、“堆积”或者“卡死”的某些间歇性疑难故障。
感觉其实差不多,咱们在Java中一般测试哪个语句或者哪个算法快不快慢不慢,不就是开始测一下时间并且结束测一下时间,减一下就知道你这个花费了多少时间了呗。一样,咱们MySQL这里也可以测量服务器的时间咋花费的,花在哪里了…在具体一点,就是数据库服务器的性能用查询的响应时间来度量,单位是每个查询花费的时间。
-
完成一项任务所需要的时间可以分成两部分:
- 执行时间
- 如果要优化任务的执行时间,最好的办法是通过测量定位不同的子任务花费的时间,然后优化去掉一些子任务、降低子任务的执行频率或者提升子任务的效率。
- 等待时间。
- 而优化任务的等待时间则相对要复杂一些,因为等待有可能是由其他系统间接影响导致,任务之间也可能由于争用磁盘或者CPU资源而相互影响。根据时间是花在执行还是等待上的不同,诊断也需要不同的工具和技术。
- 执行时间
-
MySQL性能优化
-
explain:EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法。可以帮助咱们了解MySQL优化器是如何工作的。要使用EXPLAIN,只需在查询中的SELECT关键字之前增加EXPLAIN这个词。MySQL会在查询上设置一个标记。当执行查询时,这个标记会使其返回关于在执行计划中每一步的信息,而不是执行它。它会返回一行或多行信息,显示出执行计划中的每一部分和执行的次序。
PART2:非关系型数据库优化:以Redis为例



