在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询过程,很多的查询优化工作实际上就是遵循一些原则让 MySQL 的优化器能够按照预想的合理方式运行而已。
MySQL 查询过程
优化的哲学
注:优化有风险,修改需谨慎。
- 优化可能带来的问题:
- 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统。
- 优化手段本来就有很大的风险,只不过你没能力意识到和预见到。
- 任何的技术可以解决一个问题,但必然存在带来一个问题的风险。
- 对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果。
- 保持现状或出现更差的情况都是失败。
优化的需求:
- 稳定性和业务可持续性,通常比性能更重要。
- 优化不可避免涉及到变更,变更就有风险。
- 优化使性能变好,维持和变差是等概率事件。
- 切记优化,应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化。
所以优化工作,是由业务需求驱使的!
优化由谁参与?在进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与。
优化思路
优化什么
在数据库优化上有两个主要方面:
- 安全:数据可持续性。
- 性能:数据的高性能访问。
优化的范围有哪些
存储、主机和操作系统方面:
- 主机架构稳定性
- I/O 规划及配置
- Swap 交换分区
- OS 内核参数和网络问题
应用程序方面:
- 应用程序稳定性
- SQL 语句性能
- 串行访问资源
- 性能欠佳会话管理
- 这个应用适不适合用 MySQL
数据库优化方面:
- 内存
- 数据库结构(物理&逻辑)
- 实例配置
说明:不管是设计系统、定位问题还是优化,都可以按照这个顺序执行。
优化维度
数据库优化维度有如下四个:
- 硬件
- 系统配置
- 数据库表结构
- SQL 及索引
优化选择:
- 优化成本:硬件>系统配置>数据库表结构>SQL 及索引。
- 优化效果:硬件<系统配置<数据库表结构
在这里我为大家准备一节sql的国防大学大牛精彩分享
视频内容如下;
1.从实战中来,分析SQL常见深坑;
2.优化全图谱,从0开始;
3.索引的语法精解;
4.索引的雷区,用了索引效率会更慢?
5.30分钟精通执行计划;
一个SQL引发的思考
最简单的索引
稍微复杂点的索引
索引分类
- 普通索引:即一个索引只包含单个列,一个表可以有多个单列索引
- 唯一索引:索引列的值必须唯一,但允许有空值
- 复合索引:即一个索引包含多个列
- 聚簇索引(聚集索引):并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技术上来说是B+Tree)和数据行。
- 非聚簇索引:不是聚簇索引,就是非聚簇索引
show global variables like "%datadir%";
基础语法
-
查看索引
SHOW INDEX FROM table_name\G -
创建索引
CREATE [UNIQUE ] INDEX indexName ON mytable(columnname(length));
ALTER TABLE 表名 ADD [UNIQUE ] INDEX [indexName] ON (columnname(length)) -
删除索引
DROP INDEX [indexName] ON mytable;
最后送波福利。现在加入Java高阶架构qun;603619042,即可获取Java工程化、高性能及分布式、高性能、高架构、zookeeper、性能调优、Spring、MyBatis、Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限及相关视频资料
网友评论