mysql进行大数据量查询,速度慢及解决方式

7 篇文章 0 订阅
3 篇文章 0 订阅

自述

在项目开发中我们经常会使用左连接进行查询,可能库表中的数据量并不大,所以在查询时感觉不到,如果表中的数据达到了十万条乃至百万条,并且查询的时候列的数据重复量也较大,这个时候进行左连接查询,时间可能达到死亡时间(即前端请求超时时间);这个时候造成的原因可能有以下原因:

  1. 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
  2. 项目的吞吐量达不到,形成了瓶颈效应
  3. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
  4. 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
  5. 返回了不必要的行和列
  6. 查询语句写的不好,没有很好的优化。

解决办法:

1、添加索引

添加索引的方式有一下几种:

  • ①.添加PRIMARY KEY(主键索引):

     ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 
    
  • ②.添加UNIQUE(唯一索引) :

      ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 
    
  • ③.添加INDEX(普通索引) :

      ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
    
  • ④.添加FULLTEXT(全文索引) :

      ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
    
  • ⑤.添加多列索引:

      ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
    

2、做性能优化或者集群

性能优化需要从几个方面考虑:

  • ①CPU是否有瓶颈,本项目没有大量的计算,所以CPU没有瓶颈。

  • ②O是否是瓶颈,线程太多或者连接太多都是瓶颈,本项目中并发时创建了大量的线程,达到了服务器的最 高可用的连接数,导致内存溢出了,创建太多的线程也会让CPU把时间都浪费在线程切换上了。

  • ③生产环境不要使用控制台输出,因为控制台输出是同步的,输出太多会对性能有很大的影响。

  • ④如果出现吞吐量小的情况可以输出线程栈,看看到底是block在哪里了,是调用服务时间长还是读写数据库时间长。

来源网址 : https://blog.csdn.net/weixin_33806300/article/details/86753482

集群:搭建集群项目(可大幅度或翻倍提升性能)

3、分批量查询,或进行条件拦截

  • 如果是普通查询,我们可以通过分页,或其他返回来减少查询的数据量,这样可以提高查询效率
  • 如果是左右连接,我们可以通过条件检索来快速减少数据,我们可以将不符合最多的条件设置为第一个条件,这样快速减少数据量,从而提高查询效率;数据库中条件执行顺序:按序进行,不符合的拦截,不参与后续条件匹配

4、死锁

优化程序代码

5、返回了不必要的列

众所周知:返回的列越少,查询速度相对来说也就较快,如果不知道,请自行百度,这个时候我们可以减少不必要的返回列

6、 sql写的不好

这个问题我认为是经验和个人习惯,我们要养成个人的代码规范(弱弱的说一句:我的代码也不规范,不过正在改正中,代码规范:可以参考阿里巴巴代码规范手册或公司代码规范手册),对于经验:可以阅览别人的代码,要多问,不要认为我问了别人,别人会认为我什么都不会,每个人都是这样过来的,这样也是个人最快的成长方式,曾经有个伟人说过:我们是站在巨人的肩上
总结:好的经验来自判断,而经验来自糟糕的判断!!!

在这里插入图片描述

加油! 共勉!

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL数据库中的数据量增加时,查询速度可能会变。这是因为MySQL需要扫描更多的数据行或者进行更多的磁盘IO操作来获取匹配的结果。以下是一些可行的解决方案来提高查询速度: 1. 索引优化:确保表中的列使用适当的索引。使用索引可以减少数据扫描的数,从而加快查询速度。通过分析查询语句和表结构,确定是否需要添加、修改或删除索引。 2. 分区表:将大表分解为多个较小的分区表。这样可以将数据分布在不同的物理位置上,减少查询时需要扫描的数据量。 3. 查询优化:优化查询语句,避免全表扫描和不必要的连接操作。使用合适的查询条件、避免使用通配符查询和使用子查询方式来改进查询性能。 4. 缓存机制:使用数据库缓存(如MySQL查询缓存)来缓存常用的查询结果,减少数据库访问次数。 5. 硬件升级:增加服务器的内存、CPU和磁盘等硬件资源,提高数据库处理能力。 6. 数据归档和清理:对于不再需要的历史数据,可以考虑进行数据归档和清理,以减少数据库数据量。 7. 数据库参数调优:根据实际情况调整MySQL的配置参数,如增大缓冲区大小、调整并发连接数等,以优化数据库的性能。 需要根据具体情况进行分析和调整,可以使用MySQL提供的性能分析工具(如Explain、Slow Query Log等)来帮助定位查询问题,并采取相应的优化措施。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值