一、MySQL会遇到的问题:
1、高并发的读写效率低问题----解决方案:集群,分布式。
2、海量数据的读写效率低问题-----解决方案:分表,分库。
3、高可用和高扩展----解决方案:动态扩展服务器、防止单点故障、容灾。
二、关系型数据库优化:(原则:先单机,后多机。)
2.1 单机优化方案:
1.慢SQL的定义-->分析慢SQL--解决慢SQL。
2. 表的设计、索引、引擎的优化。
3. 分表(垂直分表、水平分表)、分区、分库 的优化。
4. 缓存做集群。
5.SQL语句优化
2.2 多机优化方案(分为多个数据库):
1. 读写分离(要保证主从同步):
28原则:如果有10个数据库,则2个专门做增删改的数据库,8个专门做查询的数据库。
2. 缓存做集群
三、定位慢SQL
3.1 查看数据库状态:
3.1.1 查看运行时间:show status like ‘uptime’;
3.1.2 CRUD执行次数:
Show status like ‘Com_%’;
Show status like ‘Com_update%’
Show status like ‘Com_delete%’
Show status like ‘Com_insert%’
Show status like ‘Com_select%’
create drop truncate(重置表) delete
GLOBAL(全局)、SESSION(当前会话)
show global status like ‘Com_select%’;
show session status like ‘Com_select%’;
3.1.3 查看所有连接数:
Show status like ‘connections’;
Show status like ‘Max_used_connections’;
3.2 查看慢查询
3.2.1 查看慢查询的条数
Show status like ‘slow_queries’;
Select * from dept;
Select * from emp where ....;
3.2.2 告诉MySQL什么是慢,设置慢查询阀值。
Show variables like ‘long_query_time’;
Set long_query_time=0.5
Show VARIABLES like ‘%slow%’;
四、分析慢SQL
(1) Explain select * from emp where empno=459 :分析这条查询语句
五、单机优化---表设计和引擎
5.1 表结构设计---3NF和反3NF
1NF:表的列:具有原子性,不可再分解。
2NF:主键唯一性。
3NF:表中无冗余数据。
反3NF:适当增加字段,允许冗余-----可提高查询效率。
5.2 MySQL存储引擎
注意:在建表的时候可以指定存储引擎,不指定则为默认,该默认是在my.ini文件里配置。
MySQL引擎分类:myisam、innodb、memory。
5.2.1 MyISAM 和 INNODB的区别(主要区别)
1. 事务安全:MyISAM不支持事务,INNODB支持。
2. 查询和添加速度:MyISAM速度快,INNODB速度慢。
3. 支持全文索引:MyIsam支持,innodb不支持。
4. 锁机制: MyIsam表锁 innodb行锁。