最近在看mysql 记录了一些东西 有需要的可以看下
mysql篇
1:mysql数据库优化
1):表涉及要合理(符合3NF 3范式)
1NF:表中的记录具有原子性即每列不可再拆分
2NF:表中的记录要是唯一的不能存在多条一模一样的数据 通常涉及主键保证唯一
3NF:表中不要存在冗余数据即可以由一个字段推到出另一个字段
2):添加适当的索引(index)(普通索引、主键索引、唯一索引、全文索引)
3):分表技术(水平分割、垂直分割)
4):读写分离
5):存储过程(模块化编程可以提高速度 因为预先编译好的sql,但不利于管理)
6):对mysql配置优化(配置最大并发数my.ini、调整缓存大小)
7):mysql服务器硬件升级
8):定时清除不需要的数据,定时进行碎片整理(MYISAM引擎)
9):sql语句优化
2:mysql 存储引擎
show engines; 显示mysql支持的存储引擎
MyISAM 1、不支持事物处理 不支持外键
2、查询和添加的效率很高
3、碎片很多
4、表锁 锁住的是整个表 效率高
5、支持全文索引
optimize table tablename;进行碎片处理
常用 论坛
innodb 1、支持事物
2、行锁 锁住的是一行 更细度
用来保存比较重要的数据
memory 数据频繁改动、而且不需要在数据库中永久保存
session入库
3:mysql慢查询
show status;
常用
show status like 'uptime';
show status like 'com_select';
show status like 'com_insert';
show status like 'connections';查看连接数
show status like 'slow_queries';显示慢查询次数
show [session|global] status like 'com_insert'; 默认不写是session 想看mysql启动至现在的情况使用global
show variables like 'long_query_time';显示当前慢查询时间
set long_query_time=1;修改慢查询时间单位 秒 默认10秒
安全模式 慢查询启动
设置方法
方法一:全局变量设置
将 slow_query_log 全局变量设置为“ON”状态
mysql> set global slow_query_log='ON';
设置慢查询日志存放的位置
mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';
查询超过1秒就记录
mysql> set global long_query_time=1;
方法二:配置文件设置
修改配置文件my.cnf,在[mysqld]下的下方加入
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
3.重启MySQL服务
service mysqld restart
4:mysql 索引的代价
1:占用磁盘空间
2:对dml操作有影响 变慢
频繁的作为查询条件的字段应该建索引
唯一性太差的不适合建索引 如男女
频繁更新的字段不适合建索引
不出现在where后面的不适合建索引