-
命令目录:
/usr/bin
mysqladmin 是一个执行管理操作的客户端程序,可以用来检查服务器的配置、状态、修改密码、创建删除数据库等mysqldump 是用于迁移和备份数据库的工具…
MySQL 分层、存储引擎
-
连接层 :提供与客户端连接的服务
-
InnoDB:事务优先(适合并发操作,行锁)MyISAM:性能优先(表锁)
SQL 解析过程、索引、B 树
-
SQL 语句欠佳(连接查询)
-
服务器参数设置不佳(缓冲、线程数) SQL 编写过程和解析过程的差异:
-
索引建立在经常使用的字段上
-
左外连接,给左表加索引;右外连接,给右表加索引
三表或更多表使用相同的原则
- 复合索引,不要跨列或无序使用
-
不要在索引上进行任何操作(计算、函数、类型转换、如
... where f # 配置文件中添加以下内容
-
3、通过存储函数插入随机整数:
4、通过存储过程插入海量数据:
调用存储函数,插入数据:
/* 验证插入数据量 */
/* profiling 影响性能,在部署实施前,应关闭此项 */ /* 精确查询更多详情,Query_Id 参考上个语句的查询结果 */
/* 开启全局日志,记录开启之后的所有 SQL 语句 */ /* 将日志记入表中 */ /* 设置后执行一条查询 */ /* 将日志记入文件 */ /* 通过默认保存地址查看日志文件 */
锁机制:解决因资源共享造成的并发问题
按 操作类型 进行分类:-
读锁(共享锁) :对同一条数据,多个读操作可以同时进行,互不干扰
-
写锁(互斥锁) :如果当前写操作没有完毕,则无法进行其他读操作 按 操作范围 进行分类:
-
表锁 : 对整张表加锁开销小,加锁快无死锁容易发生锁冲突(同时操作一条数据的概率增高)并发度低MyISAM 采用表锁
-
行锁 : 对一条数据加锁开销大,加锁慢容易出现死锁锁的范围较小,不易发生锁冲突高并发概率低InnoDB 采用行锁行锁
/* 加锁后,当前会话不能对其他表进行读操作 */ /* 加锁后,当前会话不能对其他表进行写操作 */
会话 :每一个访问数据库的 dos 命令行、数据库客户端工具,都是一个会话
当前会话,对 A 表加了 read 锁:
-
该会话对 A 表:可以读,不能写
-
该会话对其他表:不能读,不能写 此时其他会话:
-
对 A 表:可以读,需要等待锁释放后可以写
-
对其他表:可以读,可以写
/* 不能对其他表进行任何操作 */
-
当前会话对 A 表:可以进行任何操作
-
当前会话对其他表:不能进行任何操作
-
其他会话:对 A 表进行操作的前提是等待写锁释放
-
MyISAM 在执行查询语句前,会自动给涉及的所有表加读锁
-
MyISAM 在执行更新操作 (DML) 前,会自动给涉及的表加写锁 对 MyISAM 表进行读操作:
-
其他进程对同一表的操作 读:不阻塞写:阻塞
-
只有读锁释放后,才会执行其他进程的写操作 对 MyISAM 表进行写操作:
-
其他进程对同一表操作 读:阻塞写:阻塞
-
只有写锁释放后,才会执行其他进程的写操作
/* 无法操作,需要等待锁释放 */ /* 其他会话操作第 8 行,没有锁,可以操作 */
某个会话对一行数据进行 DML 操时,其他会话需要等待锁释放
如果没有索引,行锁会转为表锁
/* name 列索引有效,不同的行操作互不影响 */ /* name 列是 varchar 类型,而 3 是整数类型,类型转换时索引失效,行锁转为表锁 */ /* name 列索引失效,表被锁定,无法操作 name='4' 行,需要等待锁释放 */
间隙锁是行锁的一种特殊情况,MySQL 会自动给间隙加锁
/* 其他会话操作 id=7 需要等待锁释放 */
-
如果加锁时有 where 语句,where 范围内的数据都会被加锁
当前正在等待锁的进程数量 从系统启动到现在,等待总时长 从系统启动到现在,平均等待时长 从系统启动到现在,最大等待时长 从系统启动到现在,等待次数 /* 其他会话操作该行要等待锁释放 */
关闭事务自动提交的三种方式
,一个游戏开发收藏夹~
如果图片长时间未显示,请使用Chrome内核浏览器。
-