Contents
  1. 1. 待学习
  2. 2. 学习资源
  3. 3. 存储引擎
    1. 3.1. MyISAM
      1. 3.1.1. 使用场景:
    2. 3.2. InnoDB
    3. 3.3. memory
    4. 3.4. merge
      1. 3.4.1. 解释:
  4. 4. 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 重启mysql
    net stop mysql
    net 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开启归档模式

Contents
  1. 1. 待学习
  2. 2. 学习资源
  3. 3. 存储引擎
    1. 3.1. MyISAM
      1. 3.1.1. 使用场景:
    2. 3.2. InnoDB
    3. 3.3. memory
    4. 3.4. merge
      1. 3.4.1. 解释:
  4. 4. mysql 日志功能