自述

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

  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写的不好

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

在这里插入图片描述

加油! 共勉!

更多推荐