一、MySQL基础
一、数据库范式
- 第一范式:每个列都不可以再拆分。
- 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
- 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 在设计数据库结构的时候。
要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。
、
二、SQL语言
1、数据查询语言(DQL,Data Query Language)
常用有:SELECT、WHERE 、ORDER BY、GROUP BY、HAVING
2、数据操作语言(DML,Data Manipulation Language)
常用有:UPDATE、DELETE、INSERT
3、数据定义语言(DDL,Data Defination Language)
常用有:CREATE、ALTER、DROP
4、事务控制语言(TCL)
常用有:COMMIT、SAVE OPINT(保存点)、ROLLBACK
5、数据库控制语言DCL(Data Control Language)
常用有:GRANT或REVOKE实现权限控制
6、指针控制语言(CCL)
常用有:DECLARE CURSOR、FATCH INTO......用于一个或多个表操作
三、MySQL存储
1、独占模式
- 日志组文件:ib_logfile0或ib_logfile1,默认5M大小;
- 表结构文件:*.frm;
- 独占表空间文件:*ibd;
- 字符集和排序规则:db.opt;
- binlog二进制日志文件:row、statement、mixed三种格式。常用的statement格式记录着主库数据库服务器的DDL、DML操作语句。
- 二进制日志索引文件:master-bin.index
2、共享模式(innodb_file_per_table=off)
- 数据都在idbdata1中(类似于schema)
四、MySQL执行引擎
引擎 | myisam | innodb | memory | archive |
存储限制 | 256TB | 64TB | 有 | 无限制 |
事务 | - | 支持 | - | - |
索引 | 支持 | 支持 | 支持 | - |
锁粒度 | 表级锁 | 行级锁 | 表级锁 | 行级锁 |
数据压缩 | 支持 | - | - | 支持 |
外键 | - | 支持 | - | - |
五、MySQL对SQL的执行顺序
1、用于定位表:FROM -> ON -> JOIN ->......
2、用于过滤: -> WHERE -> GROUP BY -> HAVING+聚合函数 ->....
3、用于选择展示的数据:-> SELECT -> ORDER BY -> LIMIT ->...
六、MySQL索引原理
1、Mysql索引原理
InnoDB使用B+树实现聚合索引(默认是B+树,还可以有Hash等),B+树特点如下:
- B+树相较于B树,B+树数据存在叶子节点,非叶子节点只存主键(long类型占8字节)+指针(8字节)。
- B+树数据是按页来分块的,每个页大小为16K。
- 页与页之间使用双向指针相互指向,便于数据的范围搜索。
七、MySQL参数配置优化(my.cnf)
1、连接请求的变量
- max_connections
- back_log
- wait_timeout和iterative_timeout
2、缓存区变量
key_buffer_size、query_cache_size...........
3、配置innodb的几个变量
innodb_buffer_pool_size=128m、...............