182:如何查找正在慢的 SQL、同时显示执行计划。
通过show full processlist查看当前所有线程的任务,分析time和info信息找出正在慢的SQL,然后用explain 来显示慢SQL的执行计划。
183:如何模拟执行速度慢的 SQL,对于 dml 如何进行 select 化,模拟成 select 语句。
能把事做好,就得先学会把事做烂,比如说写一个慢SQL。
select化:
select … for update // 加x锁
select … lock in share mode // 加s锁
184:对于慢 sql、有两个执行步骤。
1.执行计划的显示和排错
2.模拟执行 SQL
185:如何判断一个 SQL 很糟糕。
执行计划判断
1.rows #执行行数
2.key #索引使用情况
执行判断
1.时间 #执行时间长短
2.实际访问行数
186:解读经典的四个 show 语句。
Explain //执行计划
show table status like '%t1%'; //看表有多少行
show index from stock; //看这个表有没有索引
show create table stock \G //看表的结构
desc stock; //看表的详细信息
show session|global status \G
show variables like '%%';
187:添加索引的风险。
1.添加索引会导致全表锁,阻塞事务进行
2.执行时间非常长,资源消耗非常大,索引也是数据页,会占用一定空间
3.索引不适合,不会走索引
188:使用mysqldumpslow解读 slow log。
使用mysqldumpslow来查看慢日志
执行语句
Time:执行时间
执行用户和地址 会话ID
查询时间 锁的时间 发送的行 执行的行
189:要按时清空 slow log,防止日志过大。
清理slow log过程:
查看慢日志状态
关闭慢日志
将慢日志慢更名或者更换目录
开启慢日志
将旧的慢日志文件转移或者删除
190:解读 mysqldumpslow -t 10 -s at slowmysql.log 的输出和 mysqldumpslow -t 10 -s t slowmysql.log 的输出。
-s,是order的顺序
al 平均锁定时间
ar 平均返回记录时间
at 平均查询时间(默认)
c 计数
l 锁定时间
r 返回记录
t 查询时间
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的
1.按平均锁定时间输出10条查询结果
2.按查询时间输出10条查询结果
191:理解主键索引、唯一建索引、唯一约束、主键约束,help 掌握语法
主键索引:主键索引是聚集索引,在MySQLinnodb存储引擎中,聚集索引就是住建索引,因为表示索引组织表,而且表又是聚集索引的叶子节点,所以一个表上只允许有一个聚集索引也就是主键索引,创建主键索引的列为主键列。
唯一键索引:建立唯一键索引的列必须具有唯一性。
唯一约束:唯一键的列必须是唯一的。
主键约束:表中有主键列。
当用户创建了一个主键索引/唯一建索引,也就对相应的创建了一个主键约束/唯一键约束,约束是一个逻辑上的概念,用来保证数据的完整性,而索引是一种数据结构,既有逻辑上的概念,也代表着物理存储的方式。具体的语法前面介绍过。