mysql调优从良好的sql书写开始!
理论知识
MySQL 的运行机制
Mysql 的SQL关键字执行顺序
1、MySQL的优化方案有哪些?
MySQL 数据库常见的优化手段分为三个层面:SQL 和索引优化、数据库结构优化、系统硬件优化等。
前两个可以通过日常的书写sql来实现,养成好的习惯可以事半功倍。
SQL 和索引优化习惯准则:
-
习惯1:我们应该尽可能的使用主键查询,而非其他索引查询,因为主键查询不会触发回表查询,因此节省了一部分时间,变相的提高了查询的性能。 -
习惯2:避免在 where 查询条件中使用 != 或者 <> 操作符,因为这些操作符会导致查询引擎放弃索引而进行全表扫描。 -
习惯3:(查询具体的字段而非全部字段)要尽量避免使用 select *,而是查询需要的字段,这样可以提升速度,以及减少网络传输的带宽压力。 -
习惯4:(优化子查询)尽量使用 Join 语句来替代子查询,因为子查询是嵌套查询,而嵌套查询会新创建一张临时表,而临时表的创建与销毁会占用一定的系统资源以及花费一定的时间,但 Join 语句并不会创建临时表,因此性能会更高。 -
习惯5:(注意查询结果集)我们要尽量使用小表驱动大表的方式进行查询,也就是如果 B 表的数据小于 A 表的数据,那执行的顺序就是先查 B 表再查 A 表。 -
习惯6:(不要在列上进行运算操作)不要在列字段上进行算术运算或其他表达式运算,否则可能会导致查询引擎无法正确使用索引,从而影响了查询的效率。 -
习惯7:(适当增加冗余字段)增加冗余字段可以减少大量的连表查询,因为多张表的连表查询性能很低,所有可以适当的增加冗余字段,以减少多张表的关联查询,这是以空间换时间的优化策略。
-
习惯1:(最小数据长度)一般说来数据库的表越小,那么它的查询速度就越快,因此为了提高表的效率,应该将表的字段设置的尽可能小,比如身份证号,可以设置为 char(18) 就不要设置为 varchar(18)。 -
习惯2:(使用最简单数据类型)能使用 int 类型就不要使用 varchar 类型,因为 int 类型比 varchar 类型的查询效率更高。 -
习惯3:(尽量少定义 text 类型)text 类型的查询效率很低,如果必须要使用 text 定义字段,可以把此字段分离成子表,需要查询此字段时使用联合查询,这样可以提高主表的查询效率。 -
习惯4:(适当分表、分库策略)分表和分库方案也是我们经常说的垂直分隔(分表)和水平分隔(分库)。
2、正确使用联合索引
配置开启说明(需要注意的是,在开启慢日志功能之后,会对 MySQL 的性能造成一定的影响,因此在生产环境中要慎用此功能)
我们需要配置 my.cnf 中的“slow_query_log=1”即可,并且可以通过设置
“slow_query_log_file=/tmp/mysql_slow.log”来配置慢查询日志的存储目录,但这种方式配置完成之后需要重启 MySQL 服务器才可生效。
3、附Explain参数说明
以上字段中最重要的就是 type 字段,它的所有值如下所示:
特别注意:当 type 为 all 时,则表示全表扫描,因此效率会比较低,此时需要查看一下为什么会造成此种原因,是没有创建索引还是索引创建的有问题?以此来优化整个 MySQL 运行的速度。
- END -
推荐阅读
长按,扫码,关注
及时收看更多精彩内容
专注:软件测试技术探索与分享