Mysql-Optimize-2
很多朋友在做数据分析时,分析两分钟,跑数两小时?
在使用SQL过程中不仅要关注数据结果,同样要注意SQL语句的执行效率。
本文涉及三部分:
- SQL介绍
- SQL优化方法
- SQL优化实例
1、MySQL的基本架构
1)MySQL的基础架构图

左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右边的这一大堆都可以看成是Server(MySQL的服务端),我们将Server在细分为sql层和存储引擎层。
当查询出数据以后,会返回给执行器。执行器一方面将结果写到查询缓存里面,当你下次再次查询的时候,就可以直接从查询缓存中获取到数据了。另一方面,直接将结果响应回客户端。
2)查询数据库的引擎
① show engines;
| Engine | Support | Comment | Transactions | XA | Savepoints |
|---|---|---|---|---|---|
| ndbcluster | NO | Clustered, fault-tolerant tables | |||
| FEDERATED | NO | Federated MySQL storage engine | |||
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| ndbinfo | NO | MySQL Cluster system information storage engine | |||
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
② show variables like "%storage_engine%";
| Variable_name | Value |
|---|---|
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_mem_storage_engine | TempTable |
3)指定数据库对象的存储引擎
create table tb(
id int(4) auto_increment,
name varchar(5),
dept varchar(5),
primary key(id)
) engine=myISAM auto_increment=1 default charset=utf8;
2、SQL优化
1)为什么需要进行SQL优化?
在进行多表连接查询、子查询等操作的时候,由于你写出的SQL语句欠佳,导致的服务器执行时间太长,我们等待结果的时间太长。基于此,我们需要学习怎么优化SQL。
2)mysql的编写过程和解析过程
① 编写过程
select dinstinct ..from ..join ..on ..where ..group by ..having ..order by ..limit ..
② 解析过程
from .. on.. join ..where ..group by ..having ..select dinstinct ..order by ..limit ..
这里有一篇文章,详细说明了mysql解析过程:
https://www.cnblogs.com/annsshadow/p/5037667.html
3)SQL优化—主要就是优化索引
优化SQL,最重要的就是优化SQL索引。
索引相当于字典的目录。利用字典目录查找汉字的过程,就相当于利用SQL索引查找某条记录的过程。有了索引,就可以很方便快捷的定位某条记录。