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语句执行慢的原因