SQL 优化

本贴最后更新于 2022 天前,其中的信息可能已经时过境迁

索引优化

索引建立原则

1.在频繁在 where,group by,order by 子句出现的字段

2.经常用作过滤器的字段

3.用于连接的键(主键,外键)

索引注意事项

1.小型表建立索引可能影响性能
2.避免对大量增删改操作的字段建立索引
3.避免对有较少值的字段建立索引(例如性别只有男和女)

sql 语句优化

避免全局扫描

1.where 子句中尽量不要使用 null 值判断,可以改用一个默认值例如 0

2.where 子句尽量不要用的关键字:or, !=, <>, in, not in

3.like 尽量指使用一个 %,例如 %tom% 改为 tom%

4.where 子句避免对表字段(=左边的)进行表达式操作,函数操作

5.复合索引要满足最左前缀原则,假如复合索引为(a,b,c),则 where a='tom' 使用索引 a

where b='tom' 未使用索引

where a='tom' and b=12 使用索引 a,b

where a='tom' and c='student
'使用索引 a

where a like tom% 使用索引 a

where a like %tom% 未使用索引

非索引优化

1.尽量使用数字型字段,降低存储,增加查询性能

2.尽量使用 varchar 代替 char,因为 char 是定长的,而 varchar 不是,例如:cahr(20)存入了“abc”,则占据 20 个字节,17 个为空,但是使用 varchar(20)则只占据 3 个字节。

3.不要使用 select *,而是使用自己需要的字段列。

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    673 引用 • 535 回帖
  • 优化

    不成熟的优化是万恶之源。

    过度优化实则是劣化。

    31 引用 • 173 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖

相关帖子

2 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wenandlu

    我现在正在绞尽乳汁的优化一个 sql,其实你优化到最后你会发现,一切优化最终都是业务问题。能用技术去优化的 sql 少之又少,或者说技术性的优化基本在编码阶段就给断绝了。业务比如说大数据量的查询,这种导致的慢才是致命的,业务取舍太难了

  • Eddie

    有一段时间一直在写 sql,数据量大,基本每条语句都有分组,排序,累加,组合,when case ,不明白业务要求的人一看,你这个 sql 怎么这么复杂,不行。但是业务要求就是这样,没法改,根本没有优化的余地。