【*】查看mysql支持那些存储引擎
show ENGINES
【*】mysql最重要的存储引擎innodb
之前做读写分离,读使用MyISAM,写用innordb,但是现在MyISAM已经不维护了,所以这种做法已经不成立了
【*】mysql5.5之前默认存储引擎是MylSAM,5.5之后是innordb
【*】mysql分析语句
explain select * from sys_role_user
【*】mysql逻辑架构
实例->databases->schema->表->列,在mysql中database和schema一样,但是在Oracle或者其他的数据库中不一样
【*】查看mysql数据文件位置
show VARIABLES like 'datadir'
- 里面存放的内容就是数据库,文件夹的名称对应数据库
- 文件夹中的内容,就是表文件
.frm文件:表结构文件,.ibd文件:表数据文件 :当存储数据库的机器损坏了,data里面的这两个内容还在,可以进行表数据的恢复
【*】使用MyISAM存储引擎创建的表,可以看到多出了两个文件
其中涉及了一个概念,就是聚集索引和非聚集索引,MyISAM使用的就是非聚集索引,而innordb使用ibd,数据和索引放在了一起是聚集索引,而数据和索引分开存放的表叫做堆表,以前使用MyISAM的原因是因为其支持表压缩,现在innordb同样支持表压缩了,所以MyISAM,现在不维护了,原因是使用MyISAM对表进行压缩之后,就不能够进行插入了。
- .MYD:保存了表的数据
- .MYI:是表的索引
【*】innordb有两种表空间模式
系统表空间和独立表空间,建议使用独立表空间,系统表空间有io瓶颈,且无法收缩文件大小
- 查看当前是否使用的是独立表空间的命令,on代表使用的是独立表空间
SHOW VARIABLES LIKE '%innodb_file_per_table%'
【*】MyISAM和innordb区别
【*】mysql中的锁
- 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
- 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
- 页面锁(gap 锁,间隙锁):开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般
【*】表锁有两种模式
表共享读锁(Table Read Lock):读锁,读锁和读锁不是互斥的;读和写,写和写是互斥的
- 读锁的命令
lock table [表名] READ
- 写锁的命令
lock table [表名] WRITE
- 解锁
UNLOCK TABLES
【*】MyISAM 表锁
- 读锁,对 MyISAM 表的读操作,不会阻塞对当前表读请求,但会阻塞写请求
- 读锁,对 MyISAM 表的读操作,不会阻塞当前 session 对表读请求,当对表进行修改会报错
- 读锁,一个 session 使用 LOCK TABLE 命令给表 f 加了读锁,这个 session 可以查询锁定表中的记录,但更新或访问其他表都会提示错误;
- 写锁,对 MyISAM 表的写操作,则会阻塞其他用户对同一表的读和写操作;
- 写锁,对 MyISAM 表的写操作,当前 session 可以对本表做 CRUD,但对其他表进行操作会报错
show processlist;
2.查看数据库的使用问题
SELECT * FROM information_schema.INNODB_TRX