除了可以查看数据库状态,还可以观察mysql进程状态
用show processlist 或者开启慢查询,获取有问题的sql(而用profiling以及explain分析sql语句我们暂时以后再说)
mysql -uroot -e 'show processlist' 看数据库状态
新建一个sh去执行查看mysql的进程状态 tjproce.sh
#!/bin/bash
while true
do
mysql -uroot -e 'show processlist \G' | grep state | uniq | sort -rn >> proce.txt
usleep 100000 -->一秒运行10次
done
proce.txt的结果可能如下(即mysql运行时的部分可疑状态):
State : Sending data
State : Null
State : Coping to tmp table 复制到临时表
State : sorting result 排序(磁盘排序更慢)
State : converting heap to MYISAM 查询结果太大
State : create tmp tab 创建临时表(索引利用不合理)
看一条语句运行的具体情况:show profiles
为sql语句生成一条执行计划:show profile for query 2 / show profiling=on
下面再补充个知识点:
数据库的三范式:
1:列不可再分
2:行可以唯一区分 即主键约束
3:表的非主属性不能依赖于其他表的非主属性 即外键约束
1 2 3 范式层层递进,一级一级依赖的