1.myisam引擎适合读多写少的场景 但是不支持事务 写入数据的时候锁表不支持其他并发写入 现在用的不多崩溃维护难度大
innodb默认的存储引擎,支持事务,缩表变成行锁,适合读多写多的场景使用,综合维护成本要比myisam低 单表行数超过2000万性能下降
tokudb只支持linux需要单独下载
2.sql控制套不要使用子查询,在持久性框架中可以使用 from替代子查询
3.不要使用select查询因为这样查询会查询很多不必要的字段另外使用select查询会先查询数据库的表结构降低查询速度
4.谨慎使用模糊查询,因为这样查询不会使用索引尽量不要使使用like”%s%” 但是使用like”s%”会使用索引
5.对order by排序的字段设置索引
6.少用is null和not null这样的语句这样写mysql会直接跳过索引可以变换一下语句例如
select ename from t_emp where comm is not null(判断奖金不为空的值)
改为:select ename from t_emp where comm>=0这样改造可以使用索引查询
7.尽量少用!=运算符(索引是二叉树的!=不会使用索引)
select ename from t_emp where num!=20
改造为:select ename from t_emp where num<20 and num>20
8.尽量少用or运算符(or前面的会执行索引但是后面的会执行全表扫描)
select ename from t_emp where num=20 or num=30;
改造为:select ename from T_emp where num=20
union all
select ename from t_emp where num=30
9.尽量少用in和not in运算符
select ename from t_emp where num in(20,30);
改造为:select ename from t_emp where num=20
union all
select ename from t_emp where num=30
10.避免条件语句中的数据类型转换
11.在表达式的左侧使用运算符和函数都会让索引失效
select ename from t_emp where salary*12>=20000;
改造为:select ename from t_emp where salary>=20000/12;
select ename from t_emp where year(hiredate)>=2000;
改造为:select ename from t_emp where hiredate>=`2000-01-01 00:00:00`
12.max_connections是mysql最大的并发链接数,默认值是151
mysql允许最大的链接数上限是16384
实际连接数是最大连接数的85%较为合适
show variables like `max_connections`;查看最大连接数
show status like `max_used_connections`;实际最大链接数
连接数不是越大越好mysql为每个连接创建缓冲区,所以不应该盲目上调最大连接数
12.1,当连接过多时多余的连接就会存在堆栈里面,back_log是存放执行请求的堆栈大小,默认值是50
13.innodb_thead_concurrency代表并发线程数,默认是0
并发线程数应该设置为cpu核心的两倍
14.wait-timeout是超时时间,单位是秒
连接默认超时为8小时,连接长期不用又不销毁,浪费资源
15.innodb_buff_pool_size是innodb的缓存容量,默认值是128m
innodb缓存的大小可以设置为主机内存的70%-80%
16.慢查询日志会把查询耗时超过规定时间的sql语句记录下来
利用慢查询日志,定位分析性能的瓶颈
show variables like `slow_query%`;
slow_query_log 可以设置慢查询日志的开闭状态slow_query_log=on
long_query_time 可以规定查询超时的时间 单位为秒 long_query_time=1
17.explain select* from xx 帮我们分析sql语句执行慢的原因