MySQL优化
1、范式
第一范式:遵循原子性
原子性:原子性即操作不可再分。
第二范式:唯一性
数据库中的数据要有唯一性。所有列对于主键的约束,必须是完整依赖不能出现部分依赖。
第三范式:减少冗余
冗余:重复的数据 , 减少冗余 尽量的不要出现重复的数据,并不能完全消除冗余。
2、慢SQL
定位慢查询
1>查看慢查询相关参数
show variables like 'slow_query%';
show variables like 'long_query_time';
2>设置慢查询参数
方法一:全局变量设置(临时性的设置,mysql服务器重启会失效)
将 slow_query_log 全局变量设置为“ON”状态
set global slow_query_log='ON';
set global slow_query_log_file='/var/lib/mysql/linux-base-slow.log';
set global long_query_time=1;
方法二:配置文件设置
修改配置文件my.cnf,在[mysqld]下的下方加入
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/linux-base-slow.log
long_query_time = 1
3>重启MySQL服务
service mysqld restart
可通过这个示例语句模拟:SELECT SLEEP(15)
3、grep sed awk三剑客
sed: 命令的作用是利用脚本来处理文本文件。
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的 script 来处理输入的文本文件,这个-e可以省略,直接写表达式。
-f<script文件>或--file=<script文件>以选项中指定的 script 文件来处理输入的文本文件。
-h或--help显示帮助。
-n 或 --quiet 或 --silent 仅显示 script 处理后的结果。
-V 或 --version 显示版本信息。
动作说明:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接任何内容;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
s:取代,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g