mysql优化建议

mysql是我们常用的数据库

Posted by Autuan.Yu on September 9, 2020

故不积跬步,无以至千里;不积小流,无以成江海。

前言

mysql 优化是一个比较常见的问题,今天就简单的讲一下博主经常使用的方案

方案

绝不查询我们不需要的列

比如说,用户表里有如下信息:

CREATE TABLE `temp_autuan_member` (
  `id` varchar(32) NOT NULL COMMENT 'id',
  `member_no` varchar(11) DEFAULT NULL COMMENT '编号',
  `mobile` varchar(11) DEFAULT NULL COMMENT '手机号',
  `img` varchar(11) DEFAULT NULL COMMENT '头像',
  `custom_sign` varchar(11) DEFAULT NULL COMMENT '个性签名',
  `password` varchar(64) DEFAULT NULL COMMENT '密码',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(32) DEFAULT NULL COMMENT '创建者',
  `update_by` varchar(32) DEFAULT NULL COMMENT '修改者',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='会员信息表';

那么,当我们在一些业务查询时,可能不需要用户的全部信息.

比方说,我们可能在某一页面展示一下有此用户. 只用到了用户的头像,编号等.

那么,我们查询的时候,就只要查询 img,member_no 两列信息就可以了,用不到信息,不需要多查.

避免过多的关联连接

使用连接(join),可以优化大量的子查询,但是连接本身如果过多的话,也会引起效率的严重下滑,需要限制关联的次数.

一般,推荐3次以内为佳.

使用索引

索引是现在很多人提到sql优化第一步想到的地方.

使用索引时需要注意该表的读写频率.

如果写频率次数显著高于读频率,不推荐使用索引.

因为索引在带来读操作效率提升的同时,也带来了写操作效率的下滑.

存储过程

如果要执行的sql很多很复杂,可以使用存储过程来代替实际执行的sql.

存储过程相当于批处理,其执行效率高于执行sql.

FULLTEXT

如果要执行的语句涉及到模糊搜索,将LIKE 关键字 替换为FULLTEXT 语句.

FULLTEXT 属于索引的一种,在模糊搜索的应用下,执行效率远高于LIKE.

但也要同时注意该表的写操作频率.