常用的SQL优化办法有哪些
数据库优化的几个方面
- SQL以及索引的优化是最重要的。
- 要根据一些范式来进行表结构的设计。
- 系统配置的优化。
- 硬件优化。
sql语句的优化
可以通过打开Mysql中的慢查询日志来定位有问题的sql语句
慢查询日志相关内容:https://www.cnblogs.com/kerrycode/p/5593204.html
慢查询日志主要分为5部分,第一部分是慢查询时间,第二部分是慢查询的来源主机和用户,第三部分是查询的执行时间、锁定时间、发送的行数、扫描的行数。最后是时间戳形式记录的命令以及该命令的执行的时间戳。
通过explain查看sql执行计划,具体分析、优化
索引优化
- 选择索引
1)选择合适的索引列,选择在 where, group by, order by, on 从句中出现的列作为索引项对于离散程度不大的列,没有必要创建索引
2)索引字段越小越好(因为数据库的存储单位是页,一页中能存储的数据越多越好)
3)离散度大的列放在联合索引前边
判断离散程度大小的办法:
select count(distinct ziduan1),count(distinct ziduan2) from tablename
- 索引优化方法:
索引一般情况下都是高效的。不过凡是都有两面性,索引是以空间换时间的一种策略,索引本身在提高查询效率的同时会影响插入、更新、删除的效率。不当的使用索引不仅增加了写操作的负担,也会影响读取的效率。索引越多,数据库分析的越慢。注意点:
1)InnoDB 每个索引都会加上主键,联合索引不要加上主键,innodb会自动加,否则会冗余。
2)索引存在的目的是为了加快查询的效率,不过不是索引越多越好,建立索引要适当才好。过多的索引会增加数据库判断使用什么索引来查询的开销,所以,有时候也会出现以去掉重复或者无效的索引为优化手段的优化方式。
3)主键已经是索引了,所以primay key 的主键不用再设置unique唯一索引了。 - 索引原理参考:点这里
数据表结构优化
1、选择合适的数据类型
(1)使用可存下数据的最小的数据类型。
(2)使用简单地数据类型,int要比varchar类型在mysql处理上更简单。
(3)尽可能使用not null定义字段,这是由innodb的特性决定的,因为非not null的数据可能需要一些额外的字段进行存储,这样就会增加一些IO。可以对非null的字段设置一个默认值。
(4)尽量少用text,非用不可最好分表,将text字段存放到另一张表中,在需要的时候再使用联合查询,这样可提高查询主表的效率。
例子1、用int存储日期时间from_unixtime()可将Int类型的时间戳转换为时间格式
select from_unixtime(1392178320); 输出为 2014-02-12 12:12:00unix_timestamp()可将时间格式转换为Int类型
select unix_timestamp(‘2014-02-12 12:12:00’); 输出为1392178320
例子2、存储IP地址——bigInt
利用inet_aton(),inet_ntoa()转换
select inet_aton(‘192.169.1.1’); 输出为3232301313
select inet_ntoa(3232301313); 输出为192.169.1.1
数据库配置优化
硬件优化
上一篇: Redis(伪)集群搭建centos7
下一篇: numpy常用函数介绍