1.sql优化
SQL语句中IN包含的值不应过多
禁止用 * 来查询,用多少查多少
只查询一条数据的时候,使用limit 1
避免在where子句中对字段进行null值判断
避免在where子句中对字段进行表达式操作:
尽量使用inner join,避免left join
字符串类型的字段 查询的时候如果不加引号’’ ,会导致自动进行隐式转换,然后索引失效
对于联合索引来说,要遵守最左前缀法则
注意范围查询语句
不建议使用%前缀模糊查询
使用explain关键字进行分析
至少要达到 range(范围检索) 级别,要求是 ref(普通索引) 级别,最好consts(主键或者唯一索引)
sql性能分析
https://blog.csdn.net/wang5701071/article/details/123920789?spm=1001.2014.3001.5502
2.索引优化
主键索引,唯一索引,普通索引,组合索引,全文索引
索引设计的原则
适合索引的列是出现在where子句中的列,或者连接子句中指定的列;
数据重复高的字段(性别),索引效果较差,没有必要在此列建立索引;
使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间;
不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。
3.表结构的优化
数据类型选择
1.数字类型:非万不得已不要使用double, 建议乘以固定倍数转换成整数存储
建议区分开 TINYINT / INT / BIGINT 的选择
2.字符类型:非万不得已不要使用 TEXT 数据类型
尽量使用 NOT NULL 影响索引效率
适度冗余
适当拆分 水平/垂直
4.事务优化
1.读未提交
2.读已提交
3.可重复读 mysql默认
4.串行化
每降低一个事务隔离级别都能提高数据库的并发
5.避免锁表
在mysql中,锁表的原因是一个程序执行了对表的insert、update或者delete操作还未commite时,另一个程序也对同一个表进行相同的操作,则此时会发生资源正忙的异常,也就是锁表。
1.保持事务的轻量
2.提高运行的速度
避免使用子查询,尽量使用主键等,从而提高mysql的运行速度。
3.减少持有锁的时间
尽量快提交事务,从而减少持有锁的时间,越早提交事务,锁就越早释放。
具体点批量执行改为单个执行、优化sql自身的非执行速度 如果异常对事物进行回滚。
6.系统配置的优化
操作系统的连接数
断开连接的资源回收设置
打开文件的数量限制
mysql的连接数限制
内存设置
慢查询设置
7.硬件的优化
服务器硬件,网络带宽
