关于MySQL中的SQL优化

SQL优化基本逻辑

  • 良好的SQL编码习惯(熟悉SQL编码规范、例如避免使用select *)。
  • 优秀的SQL编写逻辑(例如表关联时小表驱动大表。
  • 定位需要优化的慢SQL语句。(如何定位慢SQL,通过执行计划分析优化
  • 调整优化策略并进行测试。(SQL结构调整、索引应用)
  • 按业务进行分库分表。

具体示例:

  • 查询时尽量避免使用select *;

多字段查询时,会基于查询字段找到对应的主键索引,然后再基于主键索引去查询其他字段,会造成回表查询,可以减少没必要的字段查询,给需要查询的字段建立索引(索引覆盖、减少回表查询)

  • 尽量避免在where子句中使用or作为查询条件;

or可能会使索引失效,进而执行全表扫描,可以将操作替换成union操作

  • where条件中尽量不要出现与null值的比较;

条件中包含和null比较时可能会不走索引,当然这也跟SQL优化器有关,优化器有时会因为数据量的多少,对是否走索引进行评估,假如它认为不走索引效率可能会更高,可能就不走索引了

  • 避免在查询中存在隐式转换;

比如查询字段是varchar类型,而在查询语句中传入整数类型,这样就存在隐式转换,可能导致查询的时候不走索引

  • 避免在where子句中使用!=<>操作符;

实际应用中这个查询是否会走索引还与数据量有关

  • 使用like查询条件时应尽量避免前缀使用%;
  • 执行查询时尽量采用最左匹配原则

当我们进行多条件查询时(这几个查询字段正好建立了联合索引),尽量按照建立索引的顺序去查询,如果查询的条件顺序和索引顺序不一致,可能会导致查询不走索引

  • 避免在查询条件中使用一些内置的SQL函数;
  • 假如in表达式后面的数据太多(一般不建议超过200),尽量避免使用in作为查询条件;
  • 有多个查询条件、分组条件、排序条件时,尽量使用联合索引(组合索引);
  • 表脸连接时优先使用内连接inner join,使用小表驱动大表;
  • 表设计时字段类型尽量使用简单数据类型;
  • 清空表中数据时优先使用truncate;
  • 插入多条数据时可考虑使用批量插入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hyde_jn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值