Mysql大纲、存储引擎
待学习
这篇博客专栏过完,基本的知识点都覆盖了
http://blog.csdn.net/column/details/mysql-in-action.html
- 数据库的分区、分表、分库、主从复制和读写分离
- 4种存储引擎和应用场景(MYISAM\INNODB\MEMORY\MERGE)
- 各种锁的机制(共享锁、排他锁、乐观锁、悲观锁、死锁、Innodb的行所)
- mysql的4种事务级别和并发问题
- mysql的索引机制、缓存查询、SQL调优、查看执行计划
- mysql的日志机制(特别是二进制日志实现主从复制,和Long SQL日志)
- 数据库的4大范式
- java方面的事务控制(传播性和隔离性)(可以把家里的资料拷出来)
学习资源
mysql 高级篇
https://zhuanlan.zhihu.com/p/26717228
执行计划
http://blog.csdn.net/mr253727942/article/details/51201222
CSDN 专栏:
http://blog.csdn.net/column/details/mysql-in-action.html
视频教学:
CSDN一套非常专业的讲解
http://edu.csdn.net/combo/detail/688
存储引擎
MyISAM
- 类型不支持事务
- 不支持外键
- 优势是访问速度快
- 普通索引是以非聚集索引实现的,主键索引树只保存数据的引用地址,
使用场景:
1.多查询少DML,因为DML的时候是表锁,不支持并发。普通索引查询快是因为非聚集索引,保存的是data的物理地址,不需要想Innodb查询到主键,再主键查询data,省了一层。
2.不需要事务
但是一般都要求事务控制和外键关联哎
操作日志保存上可以用MYSIAM,查询和插入都快,一般也不会有什么事务,
优势:
- select count(*) 直接读取,不需要扫描,但是加条件的count需要扫描
- 上亿级别以上的查询和导入明显比Innodb要快
InnoDB
- 支持事务控制
- 外键关联
- 支持并发读写,因为索引查询是行锁,高并发索引读的效率比MYISAM低,要注意主键的长度,会作为索引的保存地址保存在非主键索引的数据里面
- 自动增长列
- 支持行级别锁
- 索引支持 B-tree、Full-text 等索引,不支持 Hash 索引
- 普通索引是以聚集索引实现的,主键索引树保存完整数据,辅助索引保存的是主键值,所以选取主键值不要太大
memory
- 内存存储,mysql重启数据消失
- 默认索引Hash算法,速度快
- 不支持事务、一般被redis memcache取代windows 重启mysqlnet stop mysqlnet start mysql
merge
用来做分表用的,多个结构相同的表,虚拟出一个merge表,可单独取操作子表来实现高性能,通知也支持操作merge表来实现,逻辑上统一的数据。
解释:
InnoDB只有在走索引查询加锁时才是行锁,否则都是表锁
例如:TXA不走索引排他锁查询数据,因为没有走索引,所以排他锁查询把这个表都锁了、
TXA:
begin;
select * from user where password
=’234567’ for UPDATE;
TXB:
begin;
select * from user where id=7 lock in share mode; //阻塞,因为整个表被锁住了
mysql 日志功能
SHOW GLOBAL VARIABLES LIKE ‘%log%’;
- 默认error日志是开启的,query log是关闭的。如若不是为了调试数据库的目的建议不要开启查询日志。
在配置文件当中配置,记录慢查询,方便定位问题,开销也小,默认是关闭的,默认的长查询是10秒。可以通过SHOW GLOBAL VARIABLES LIKE ‘long%’; 查询。
slow_query_log=1
log-slow-queries [= DIR/[filename] ]
session long_query_time=2; # 设置2秒以上的查询定义为长查询可以开启二进制日志,来查看所有的DML操作的记录,SQL执行时间,启用该选项数据库性能降低1%,但保障数据库完整性,对于重要数据库值得以性能换完整。有些类似于oracle开启归档模式