MySQL笔记08-MySQL优化

【SQL语句优化10个原则】

MySQL笔记08-MySQL优化

 

【索引与性能分析】

MySQL笔记08-MySQL优化

show profiles 命令可以用来查看本次启动MySQL客户端执行过的SQL语句的执行时间:

但是前提需要先执行 set @@profiling=1;

从下面的结果可以看出,两条相同的SQL语句,后面的比前面快,因为MySQL缓存了查询。

MySQL笔记08-MySQL优化

若要查看某一条Query的查询详情,使用 show profile for query N:

MySQL笔记08-MySQL优化

◆ MySQL执行计划:Explain

MySQL笔记08-MySQL优化

explain select * from qg_score_bmd order by id limit 10,30;

MySQL笔记08-MySQL优化

MySQL笔记08-MySQL优化

◆ MySQL索引建立和使用的基本原则:

MySQL笔记08-MySQL优化

【服务器和配置的优化】

MySQL笔记08-MySQL优化

SHOW GLOBAL STATUS 可以得到系统当前状态,如下所示(表格数据不完整,太长,只显示部分):

MySQL笔记08-MySQL优化

MySQL笔记08-MySQL优化

◆ 选择存储引擎的基本原则:

MySQL笔记08-MySQL优化

◆ MySQL服务器调整优化的措施:

MySQL笔记08-MySQL优化

【MySQL瓶颈及应对措施】—— 针对千万级别数据量

MySQL笔记08-MySQL优化

【数据库设计】

【1-范式与反范式】

◆ 通常在设计数据库时需要遵守如下原则:

MySQL笔记08-MySQL优化

【2-数据库分区】

MySQL笔记08-MySQL优化

SHOW VARIABLES LIKE '%partition%'

MySQL笔记08-MySQL优化

(很遗憾,本机测试执行此命令,没有返回任何数据,估计是不支持吧...)

MySQL笔记08-MySQL优化

◆ 分区的创建

MySQL笔记08-MySQL优化

MySQL笔记08-MySQL优化

◆ 使用分区的一些限制

MySQL笔记08-MySQL优化

【3-分表的应用】

MySQL笔记08-MySQL优化

【1-MySQL自增长序列】

1.MySQL通过 auto_increment 自增长字段;

2.MySQL自增长“序列” 和 序列 是两回事;

3.修改系统变量 auto_increment_increment 设置步长,这事一个全局设置。

4.推荐使用序列,因为有更高的定制性和可控性。

5.在Log表和无意义字段中仍然推荐使用自增。

6.不要再一个表的字段上同时使用自增和“序列”。

MySQL笔记08-MySQL优化

后面的具体的操作序列的案例,参考PDF。

 

【2-MySQL视图】

MySQL笔记08-MySQL优化

◆ 创建视图的注意事项

MySQL笔记08-MySQL优化

【3-MySQL存储过程和事件调度】

◆ 补充 —— PHP中防止Apache或者Nginx中断的代码:

ignore_user_abort(true);

set_time_limit(0);

MySQL笔记08-MySQL优化

[代码]存储过程和定时器:定时删除处理过的日志

[代码] 创建事件 CREATE EVENT

MySQL笔记08-MySQL优化

【4-用MySQL模拟消息队列】

MySQL笔记08-MySQL优化

【5-SQL注入漏洞与防范】

MySQL笔记08-MySQL优化

◆ 一个简单的SQL注入登录(牛逼啊!):

MySQL笔记08-MySQL优化

◆ 利用注入获取另外一个表的数据(看PDF)

◆ 如何防范SQL注入

MySQL笔记08-MySQL优化

 

  1. show status 主要查看以下信息:

MySQL笔记08-MySQL优化

2.使用 mysqladmin -uroot -p123456 ext 不登陆mysql也可以查看此信息。

Queries 当前已经发生了多少次查询。

MySQL笔记08-MySQL优化

Threads_connected 有几个线程来连接了。

MySQL笔记08-MySQL优化

Threads_running 有几个进程正在工作。

MySQL笔记08-MySQL优化

 

【Awk脚本】

Awk是一个简便的直译式的文本处理工具.擅长处理--多行多列的数据。

【处理过程】:

While(还有下一行) {

        1:读取下一行,并把下一行赋给$0,各列赋给$1,$2...$N变量

        2: 用指定的命令来处理该行

}

* 如何处理1行数据?

答: 分2部分, pattern (条件) + action(处理动作)

* 1个简单awk脚本

awk ‘{printf “%s\n” , $1}’ xx.txt // 把xx.txt的每一行进行输出

* 统计mysql服务器信息

mysqladmin -uroot ext|awk 'Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}'

 

vim score.txt

MySQL笔记08-MySQL优化

awk '{printf("%s\n"),$0}' score.txt 打印:

MySQL笔记08-MySQL优化

打印 字母l 开头的数据 —— lisi 和 lucy

awk '/l/{printf("%s\n"),$0}' score.txt

MySQL笔记08-MySQL优化

mysqladmin -uroot -p123456 ext | awk '/Queries/{printf("%d",$4)}'

为啥是$4,因为要取出 | Queries | 1416 | 的第4列:

MySQL笔记08-MySQL优化

《附加》 mysql -u --skip-grant-tables 就可以跳过验证账号和密码而直接登录MySQL,

而且一些命令行的输出也不会报出:Warning: Using a password on the command line interface can be insecure.

MySQL笔记08-MySQL优化

同理,也把Threads_connected 和 Threads_running 打印出来:

mysqladmin -uroot -p123456 ext | awk '/Queries/{printf("%d ",$4)}/Threads_connected/{printf("%d ",$4)}/Threads_running/{printf("%d\n",$4)}'

MySQL笔记08-MySQL优化

也可以优化一下,赋给变量,再统一打印,或写入log:

mysqladmin -uroot -p123456 ext | awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}'

或者:

mysqladmin -u --skip-grant-tables ext | awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}'

MySQL笔记08-MySQL优化