mysql查询慢Sending data耗时问题

背景:刚接手一个完结项目,要性能测试,100w条数据查询时间不超过10s,这个功能的查询是多表关联,现在才几千条数据但是在数据库执行sql的时候发现耗时几十秒,肯定满足不了要求,然后我又是小白,不懂就百度各种大神的经验吧,然后有了一下操作。。。。

一、在navicat中执行了sql 查看下耗时都在 Sending data 中,然后就去看各种大神 怎么去解决,然后就加索引吧,第一次使用索引,就百度了下怎么使用索引。

索引使用:

1.添加PRIMARY KEY(主键索引)

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

2.添加UNIQUE(唯一索引) 

mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 
3.添加INDEX(普通索引) 
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 
4.添加FULLTEXT(全文索引) 
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

然后就想那么多索引类型我选择哪一个,又百度了一下,看到一个mysql性能优化不错,想了下建立了索引,一开始索引名随便取了,后来看大家规范使用了,index_name(name是需要使用索引的字段名) 

mysql explain详解:

这下想着应该会查询很快了,结果,没啥用,然后又查看 在查询开始加explain 查看查询的详情,

然后就去看这些都代表啥,这个MySQL explain详解不错,了解到key有null,说明这个表的索引没用上,而且还是大量数据的表,就去查看啥原因。看到,可以加上force index(强制要走的那个索引)可以强制使用索引,也就加上试试了,顺带几下两个使用例子:

select * from table force index(ziduan1_index) limit 2;(强制使用索引"ziduan1_index")
select * from table ignore index(ziduan1_index) limit 2;(禁止使用索引"ziduan1_index")

好了继续执行sql结果还是不行,耗时没啥变化,再去查看,索引还是没用上,不懂了。。。。

关联字段类型不同:

又百度,后来看到一个说关联表的字段类型不一致也会导致查询慢。然后就去一个一个去查看关联字段。结果发现两张表一个是int 一个是varchar,然后就改一样的呗,果然,查询速度立马上来了。这次只要1秒了。再次访问竟然只要0.02秒r,很神奇,结果发现MySQL可以缓存,私下研究了。

缓存:

之前做的项目使用了redis缓存,然后也想这个也加上是不是更好,感觉spring boot 集成redis挺方便的,就加上的redis,为了提高性能,又在前端每次分页查看的时候把数据也缓存下来。多重使用,效果果然提升了好多。。。

总结:度娘是个好东西!!!!


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值