热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

怎么将查询到的数据表传到文本区_MySQL查询缓慢的N种原因,以及N+1种解决方法...

引言:昨天查询数据库的时还正常,今早来上班时,SQL语句查询就突然变得很慢了。这样的情况我相信你一定遇到过。下面就让小编来带你了解其中的原

引言:

昨天查询数据库的时还正常,今早来上班时,SQL语句查询就突然变得很慢了。这样的情况我相信你一定遇到过。 下面就让小编来带你了解其中的原因吧!

668817f0a14e8f49a8927d243a108644.png

本篇文章简单总结了一下可能导致数据库查询慢的原因,希望能给大家后续查询优化提供一下指导。

SQL语句查询突然变得很慢,常见的情况有以下几种:

电脑系统内存不足

和咱们的电脑一样,当内存不足的时候,就会变得很卡!

网速突然降速了

当网络速度变慢,HTTP 的请求也会变慢!

你所写的SQL语句不是最优解

两个原则

两条快于一条:

5df80751be76a55029e7ce2fd93ed408.png

第一条SQL语句中,where查询语句中出现了null,这样就是导致数据库的引擎不会使用索引,而采取的是进行全表扫描一遍,这样的查询就会变得很慢。如果使用0来代替null,即为第二条SQL语句,则数据库查询运行速度的就会提高

精准快于全表:

6df3f406a95751d48fe2a4ebe8e62e68.png

很明显,第一条SQL语句的执行速度要比第二条SQL语句快的多。因为第一条SQL语句使用的是精准查询,索引查询;第二条SQL语句是将表中所有的数据都检索一遍,相当于全表查询,这样是很消耗时间的和资源的。

查询的数据库数据量变得很大

当你SQL Server 中所查询的数据量很大时,也会造成你的数据库很慢。

比方说 :我有一个数据量达到几百万的商品表,现在我需要查里面某些商品的信息,这样的查询也会很慢哦!例如:

c02a9bdb670fc4b88453b42aa2da385d.png

表中数据上百万的数据量,要在这海量的数据中找到你所需要的商品信息,如果你写上这样的SQL语句,查询速度必须慢!

解决方案:

使用索引:

//--建立索引

e50f2517d95c2b3f8f205017a3522eee.png

这样的情况下,可以明显增加查询时间。因为使用了索引,可以在海量的数据中,快速的找到你所需要的信息,而不是在上百万的表数据中,一个个的检索到你所需要的信息。

数据库发生死锁现象

我们知道当程序发生死锁现象之后,程序就会卡在那个位置会变得很慢,很慢甚至一点都不动。所以,当你的SQL语句出现死锁现象之后,数据库查询也会很慢!

数据库死锁现象是指:两个或者是两个以上的SQL语句,争相访问同一个数据表,并且在第一天SQL语句访问表的时候,同时将数据表给锁住了。就会造成第二条,第三条SQL语句不能访问到表而进行迟迟等待。如果没有人员原因干预的话,就是一直处于这种状态下,所以叫做死锁。

解决方法:

这种SQL语句发送死锁现象,一般都是bug造成的。修改程序的逻辑顺序,给出一个合适的程序执行逻辑顺序。避免同时锁定两个资源的现象发生。给SQL语句安排一个先后顺序。

I/O 执行响应时间太长
ed6c423e551d9ac03ed924b871954b7a.png

我们都知道木桶原理,决定盛水多少的,不是长木板而是那些短木板。同样,对于数据库而言 ,电脑系统的硬件设备 ——磁盘I/O 则是短木板。在程序执行中,我们经常会发现系统中的I/O,一直在不停地执行,而CPU却在清闲的等待。造成这种原因的发生是因为,磁盘的I/O(即磁盘的读写速度)远远跟不上CPU的处理速度。

优化方案:

1. 尽可能的将程序放到内存中去执行

2. 当读写I/O响应速度跟不上时,增加硬盘的个数,扩大存储

3. 尽可能的选择一些读写速度高的磁盘来解决问题(ssd)

End

当第二天打开电脑时,发现数据库变得缓慢时,不妨试一试上面的方法,一定可以有意想不到的惊喜收获。

以上是例举了一些常用的方法,如果你有第N+1种方法,欢迎留言区留言探讨~


网站崩溃找不到原因?平台搭建无从下手?热门技术不想落伍?想要变强找不到资料?

加入[IT拯救联盟],让大牛和同伴拯救你,带你装x带你飞。群里有定期干货分享、大牛专业解答、实用IT工具优选.....

私信小编“联盟”,即可加入我们~



推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
author-avatar
平凡的淘淘不绝_587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有