故不积跬步,无以至千里;不积小流,无以成江海。
前言
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.
但也要同时注意该表的写操作频率.