mysql之sql优化

q1871901600 发布于 2024-10-25 22 次阅读


(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) 小心永久链接

每次数据库操作完毕之后一定要关闭数据库链接

sql 语句优化会不会,说出你知道的?

(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 优化

MySQL 的优化有多种方式,我们可以从以下几个方面入手:

存储引擎的选择、字段类型的选择、索引的选择、分区分表、主从复制、读写分离、

SQL 优化。详细优化请查看参考文章

参考文章:

https://blog.csdn.net/zls986992484/article/details/52860496