一,查询优化
1.先用 DESC 或 EXPLAIN 分析下查询语句
2.合适的索引
3.使用like 第一个字符是% 不能使用索引
4.多列索引只有查询条件中使用了第一个字段,才能用的索引
5.使用OR关键字,前后两个条件都是索引是才有效
6.优化子查询,使用JOIN 代替子查询
二,表结构优化
1.将字段很多的表中不太常用的字段分解成多个表(select * from member LEFT JOIN detail ON member.id=detail.mid)
2.适当增加冗余字段
三,使用中间表或者缓存一些数据nosql
对一些需要查询多张表,并且结果更新不是太频繁的,可以使用中间表或者nosql等缓存一下
五,优化写入速度
越多的索引,写入速度越慢,书上给出的方法是写入前禁用索引和唯一性索引,写入完成后,再开启,我感觉不太靠谱啊
六,定期分析,检查,优化表
分析表:ANALYZE [LOCAL] TABLE name;
检查表:CHECK TABLE name option={QUICK|FAST|MEDIUM|EXTENDED|CHANGED}
优化表:OPTIMIZE [LOCAL] table name;
七,提升服务器硬件性能,和配置
1.增加缓存
2.固态硬盘
3.多处理器
八,优化mysql参数
key_buffer_size:索引缓冲区大小
table_cache:同时打开表的个数
query_cache_type: 0不适用缓冲区,1所有查询使用缓冲区,2只有使用SQL_CACHE才能使用缓冲区
query_cache_size:查询缓冲区大小
sort_buffer_size:排序缓冲区大小,这个值越大,进行排序速度越快
read_buffer_size:每个线程连续扫描时分配的缓冲区大小
read_rnd_buffer_size:每个线程保留的缓冲区大小
innodb_buffer_pool_size:innodb类型的表和索引的最大缓存
max_connections:最大连接数
thread_buffer_size:表示可以复用的线程数量
wait_timeout:关闭一个连接时等待的秒数,默认28800