(1) 用查询缓存优化你的查询(一般不开启)
(2) EXPLAIN select 查询:explain 的查询结果会告诉你索引主键是如何被利用的


(3) 只需要一行数据时使用 limit1
SELECT * from article limt 1;
(4) 为搜索字段添加索引
SELECT * from article where title='aa'; title就应该添加索引
(5) 在关联表的时候使用相关类型的列,并将其索引
EXPLAIN SELECT a.* from article a LEFT JOIN article_commit ac on a.id=ac.article_id where title='Ms.';

EXPLAIN SELECT a.* from article a right JOIN article_commit ac on a.id=ac.article_id where title='Ms.';

1,首先将关联表的article_id字段加上索引
2,对比数据量大小,以数据量小的表作为主表查询时会减少扫描行数
(6) 千万不要 ORDER BY RAND()
EXPLAIN SELECT a.* from article a right JOIN article_commit ac on a.id=ac.article_id where title='Ms.' ORDER BY RAND();

使用了ORDER BY RAND的时候,出现Using filesort提示说明

(7) 避免 select*
因为 select * 会浪费不必要的索引空间,数据量大的时候性能会受到比较大的影响
(8) 永远为每张表设置一个 ID
id是主键索引,本身就是用来提高检索效率的
(9) 使用 int 代表 枚举 而不是 VARCHAR

(11) 尽可能的使用 NOT NULL
(12) Java 中使用 Prepared Statements
避免sql注入
(13) 无缓冲的查询
一般不开启数据库自带的查询缓存
(14) 把 IP 地址存成 UNSIGNED INT
数字比字符串更节省空间
(15) 固定表的长度
固定长度更节省空间也提高检索效率
(16) 垂直分库:“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
(17) 水平分库:“水平分割”是一种把数据库中的表按行变成几张表的方法,减少单个表的数据量从而达到减轻单个数据库的压力,提升检索效率的目的。
(18) 越小的列会越快
(19) 选择正确的存储引擎
(20) 小心永久链接
每次数据库操作完毕之后一定要关闭数据库链接
(1) 避免在列上做运算,可能会导致索引失败
(2) 使用 join 时应该小结果集驱动大结果集,同时把复杂的 join 查询拆分成多个 query,不然 join 越多表,会导致越多的锁定和堵塞。
(3) 注意 like 模糊查询的使用,避免使用 单%
(4) 不要使用 select * 节省内存
(5) 使用批量插入语句,节省交互
(6) Limit 基数比较大时,使用 between and
(7) 不要使用 rand 函数随机获取记录
(8) 避免使用 null,建表时,尽量设置 not nul,提高查询性能
(9) 不要使用 count(id),应该使用 count(*)
innoDB是索引树组织表,不仅有主键索引树还有其他索引树,而count(*)反正是要全表扫描,那么优化器会去遍历最小的索引树,普通索引树的叶子节点只有id,当然要更小一些。
执行这个的时候innoDB遍历全表,但不取值,并且不判断,因为count(*)肯定不是null,直接累加。
count(id)
执行这个的时候innoDB遍历全表,把每一行数据的id值取出来返回给mysql,mysql拿到数据以后判断不为空则+1。累加后返回。
count(1)
执行这个的时候innoDB遍历全表,但不取值,直接返回给mysql,mysql收到返回值,给返回值赋值1,然后判断,累加。
count(字段)
这个和count(id)类似,只不过如果允许为空的话,需要把值取出来做个判断,多个判断。如果不允许为空,那就一样了。
这么一对比,就看出来了,显然count()更快,这也是因为mysql对count()这个语句专门做了优化。所以更推荐count(*)
(10) 不要做无谓的排序,尽可能在索引中完成排序
(11) From 语句中一定不要使用子查询
(12) 使用更多的 where 加以限制,缩小查找范围
(13) 联合索引要符合最左缀原理

MySQL 的优化有多种方式,我们可以从以下几个方面入手:
存储引擎的选择、字段类型的选择、索引的选择、分区分表、主从复制、读写分离、
SQL 优化。详细优化请查看参考文章
参考文章:
Comments NOTHING