前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >造成慢SQL可能的原因

造成慢SQL可能的原因

作者头像
晓果冻
发布2022-09-08 12:42:19
4950
发布2022-09-08 12:42:19
举报
文章被收录于专栏:一直在努力的Java菜鸡er

造成慢SQL可能的原因

无索引或者索引失效

锁等待

  • 行锁是基于索引加的锁,如果我们在更新操作时,索引失效,行锁也会升级为表锁
  • 除了锁升级还要注意死锁

不恰当的SQL语句

  • 例如select *操作一般都需要回表,除非where条件是主键。
  • 对非索引字段进行排序。

在大数据表中使用<LIMIT M,N>分页查询。

优化案例

思路:利用子查询优化分页查询

代码语言:javascript
复制
select * from order where id > (select id from order order by order_no limit 10000,1) limit 20
优化select案例
代码语言:javascript
复制
MySQL Innodb默认创建主键时会创建主键索引,而主键索引属于聚簇索引,即在存储数据时,索引是基于B+,构成的,
而叶子节点存放的是数据。

假设存在order_no、status俩列联合索引,现在要查出order_no、status俩列的值,通常我们都是这
样子干的:
select * from order where order_no='xxx'  #效率低
select order_no、status from order where order_no='xxx' #正确
为什么*会效率低呢?因为order_no、status是联合索引,定位到这个索引并不包含这行所有的数据,此时
就需要通过主键索引回表去查找整行的数据了,注意回表。
select count(*)优化方案

MYISAM会有一个变量记录具体行数,但如果加了条件,InnoDB和MYISAM都一样,得老老实实去查,所以下面讨论的都是日常使用最多的InnoDB

  • 如果业务不要求精确值,可以explain,它不会真正去执行,只会返回个大概的值。
  • 如果想要精确值,而表的数据又多,可以在另一个地方维护一个变量,没增删的时候都记录下,曲线救国。

思考题

  • 最佳回复
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 造成慢SQL可能的原因
    • 优化案例
      • 优化select案例
      • select count(*)优化方案
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档