一、思惟导图 mysql
二、如何设计一个关系型数据库?sql
2.1 首先是物理存储数据库
2.2 其次是程序方面的逻辑管理:windows
存储管理、缓存、索引管理、锁管理...缓存
三、索引模块数据结构
3.1 为何要使用索引?工具
避免去全表扫描、提高查询效率;优化
3.2 什么信息能够做为索引?spa
主键、惟一键..等能做为区分数据的字段;设计
3.3 索引的数据结构?
a,使用二叉查找树进行二分查找
b,使用B树进行查找
c,使用B+树进行查找
d,使用hash索引进行查找
3.4 如何定位并优化慢查询SQL?
a,根据 慢日志 定位慢查询SQL
使用SQL语句查看 慢日志是否开启、查找慢日志存储位置、SQL执行多长时间被记录:
show variables like '%quer%';
设置慢查询日志开启:
set global slow_query_log=on;
设置SQL查询时长:
set global log_query_time=1;
【windows经过mysql.ini可永久设置】
查询 本次会话 慢查询的数量:
show status like '%slow_queries%';
b,使用explain工具分析SQL
explain 慢查询的SQL语句;
c,修改SQL,尽可能让SQL使用索引
3.5 索引是创建的越多越好么?
不是
a,数据量较小的表不建议创建索引,使用索引会形成额外的开销;
b,数据表更须要维护索引;
c,索引须要额外的存储空间;
四、锁模块
4.1 MyISAM与InnoDB的区别:
MyISAM默认支持 表级锁,不支持行级锁;
InnoDB支持表级锁、行级锁;
五、SQL语法:
5.1 group by
5.2 having
一般与group by配合使用;
where过滤行,having过滤组;