Sql执行平时都很快但是偶尔就会很慢
Sql执行平时都很快但是偶尔就会很慢
记录一下在翻看MySQL技术文章的资料,觉得很不错就自己记录一下。大部分来源于网络。
SQL执行变慢的原因
一条Sql执行很慢,那是每次执行都慢还是偶尔慢,简单的总结一下:
一、针对偶尔慢的原因:
- 数据库在刷新脏页。
- 数据库的自然数连接占满了。
- 拿不到锁。
二、针对一直慢的原因
- Sql 索引没有用上或者选择错误的索引。
- 函数操作导致索引失效。
- 表过大,多表多库联合查询。
解释:
1、数据库在刷新脏页
当我们输入一条新数据的时候,或者要更新一条数据的时候,我们知道数据库会在 内存 中把对应的字段值更新掉。但是更新之后,这些更新的字段并不是同步写入磁盘进行持久化操作,而是记录到redo log 日志里边,等待空闲的时候在写入磁盘,但是如果数据库一直在操作,redo log日志 存贮就达到上限,数据库就会全心把redo log 日志里的内容写入磁盘,而这个操作就导致我们的SQL查询变慢。
2、数据库连接的自然数满
出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?正常的mysql_connect 之后调用 mysql_close()关闭连接。但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘mysql_close()
3、拿不到锁
我们要执行的SQL,碰巧碰到别人也在用此条数据,就只能等待了。判断是否真的在等待锁,可以用
show processlist 命令来查询当前状态。
重要的是一直慢的原因
4、Sql 索引没有用上或者选择错误的索引。
我们执行一条SQL,当这条SQL所用的where 条件的字段 没有添加索引就会导致数据库扫描全表。选择错误的索引则是因为MySQL会自己选择索引的基数,而选择这个基数的来源则是MySQL会对一些数据进行随机取样,如果碰巧等到MySQL取样的片区区分度很低,基数很小就会导致直接放弃使用索引,从而采取使用走全部扫描了。如果基数越大就查询越有优势。基数:系统是通过索引的区分度来判断的,一个索引上的值越多,意味着出现相同数值的索引越少,意味着索引的区分度越高。我把区分度叫基数。关于使用错误的索引我们可以使用强制使用我们指定的方式来查询 FORCE INDEX (索引名)
Select * from A force index(a) where c < 1000 AND c >10000000
也可以使用 SHOW INDEX FROM A 来查询索引基数是否和实际吻合,如果不符合的话我们可以从新来统计基数,可以用 ANALYZE TABLE A; 来进行重新统计分析。
5、函数操作导致索引失效
select * from A where c -1 = 1000; 未使用索引。select * from A where c = 1000 +1; 使用索引。
6、数据太多又是夸表又是夸库的 肯定慢,但是可以优化到可以接受的程度上。
Sql执行平时都很快但是偶尔就会很慢相关推荐
- sql between 效率高吗_整个SQL语句的执行效率都靠它了...
作者:韩锋 优化器是数据库最核心的功能,也是最复杂的一部分.它负责将用户提交的SQL语句根据各种判断标准,制定出最优的执行计划,并交由执行器来最终执行.优化器算法的好坏.能力的强弱,直接决定了语句的执 ...
- 做一个项目,平时都用到哪些工具提高效率(上)
做一个项目,平时都用到哪些工具提高效率(上) 转载 做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工 ...
- 随笔:数据库SQL执行顺序
2021年11月20日 周六 写于 上海 和平公园 刚刚还小激动了一下,看到消息上有一个关注,赶紧翻看了一下,才发现还是2019年的一位朋友的关注,顿时归于平静.如果有人关注我,我还是愿意写一 ...
- Oracle 查看 SQL执行计划
Oracle 查看 SQL执行计划 SQL性能分析 执行计划可以用来分析SQL的性能 一.查看执行计划的方法 1. 设置autotrace set autotrace off: 此为默认值,即关闭au ...
- 一条SQL要28秒 mysql_一条简单的 SQL 执行超过 1000ms,纳尼?
阅读本文大概需要 2.8 分钟. MySQL 对我说 "Too young, too naive!" ▌大概过程 在测试环境 Docker 容器中,在跨进程调用服务的时候,A 应用 ...
- sql server varchar最大长度_来自灵魂的拷问—知道什么是SQL执行计划吗?
面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧!看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会 面试官:. ...
- sql 执行顺序_10个简单步骤,完全理解SQL
点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 多年前收藏在笔记中的一篇文章,今天偶然翻出,重读了一遍,依然大有收获.分享出来,大家一 ...
- 一条简单的 SQL 执行超过1000ms,纳尼?
作者:VipAugus https://juejin.im/post/5ce906a3e51d455a2f2201dc MySQL对我说"Too young, too naive!" ...
- MySQL创建索引跳过redo_明明我建了索引,为什么sql执行的还是这么慢?
原标题:明明我建了索引,为什么sql执行的还是这么慢? 很多同学经常遇到这样一个问题,就是为了避免sql 执行缓慢,提前将各种可能用到的字段都添加上索引,查询的时候尽可能的使用这些字段,避免全表扫描. ...
最新文章
- Android 手机卫士--自定义组合控件构件布局结构
- 基于 Kubernetes 的微服务项目设计与实现
- vue使用webpack创建项目的命令
- python 中 numpy 模块的 size,shape, len的用法
- Online Learning算法理论与实践
- opencv画图_c++
- 2019款享域视频_钱都花哪了?单日投放最高2443款,复盘2019年买量最烧钱的100款手游...
- POJ 1811 Prime Test
- Chrome 52的变化
- sdibt 1244类似于拓扑排序
- angular Meterial错误 Did you add it to @NgModule.entryComponents
- 9款常用的数据可视化工具推荐
- 《东周列国志》第八回 立新君华督行赂 败戎兵郑忽辞婚
- latex不等于符号
- 从看脸到读心:深度理解人的视觉技术走到哪了?
- mysql怎么打开db文件_mysql的db文件怎么打开?
- 开机黑屏,硬盘灯不亮,没有自检画面,进不去bios
- 上周热点回顾(7.4-7.10)
- win10删除提示找不到该项目
- 分享一个自用的zsh主题
热门文章
- 【程序源代码】商城(微信小程序)
- GIMP类似于PhotoShop的开源免费软件
- 《软件登记测试报告》可以作为软件第三方检测报告使用吗
- php输出1到100的质数,怎么用PHP写出1到100的质数
- Tkinter-疫苗信息管理系统
- 电子制造业如何快速回复客户订单交期?
- php preg_match 漏洞,PHP preg_match()函数信息泄露漏洞
- MySQL 8.0原理与实战一网打尽,甲骨文数据库专家硬刚5年之作
- html图片转换特效,css3图片切换效果
- 脑洞 博弈 E. Competitive Seagulls 2017 ACM Arabella Collegiate Programming Contest