当前位置: 首页 > news >正文

哪个网站可以做鸟瞰图广州今日头条新闻最新

哪个网站可以做鸟瞰图,广州今日头条新闻最新,网站备案验证码错误,门户网站自查整改情况报告大家好,我是蓝胖子,前段时间mysql经常碰到慢查询报警,我们线上的慢sql阈值是1s,出现报警的表数据有 7000多万,经常出现报警的是一个group by的count查询,于是便开始着手优化这块,遂有此篇,记录下…

大家好,我是蓝胖子,前段时间mysql经常碰到慢查询报警,我们线上的慢sql阈值是1s,出现报警的表数据有 7000多万,经常出现报警的是一个group by的count查询,于是便开始着手优化这块,遂有此篇,记录下自己优化过程中的心得。

优化慢sql前,肯定是要懂sql的查询逻辑,所以我先介绍下group by 语句的执行逻辑。

group by 执行逻辑

环境准备

拿下面这张表举例,这是一张记录文件夹id和用户id关联关系的表。其中dir_id代表文件夹id,uid代表用户id,还有个唯一索引是uniq_dir_id。

create table t_dir_user
(
id bigint unsigned auto_increment
primary key,
dir_id bigint default 0 not null,
uid bigint default 0 not null,
constraint uniq_dir_id
unique (dir_id, uid)
)

表一共有7000多万的数据。下面开始介绍使用group by 语句时sql执行的原理。

没有用到索引的情况

先说下结论,group by后面的列如果不能使用上索引,那么则会产生临时表且很可能产生文件排序的情况。

group by 语句有分 使用到索引和没有使用到索引的情况,先看看没有使用到索引的情况。假如我想查询在一些文件夹范围内,用户关注的文件夹数量。那我可以写出下面这样的sql。

explain select count(1), uid  
from t_dir_user  
where dir_id in (1803620,4368250,2890924,2033475,3038030)  
group by uid;

使用explain分析时,会发现这个查询是使用到索引的,且Extra 那一栏会出现下面的信息。

Using index condition; Using temporary; Using filesort

上述信息代表了查询是使用到了索引来做where条件查询,并且使用到了临时表和文件排序。

注意📢📢 ❗️ 临时表和文件排序这两个操作都是性能不佳的操作,写sql时应尽量避免。

现在来对这种情况做更加具体的分析,在上述例子中,mysql相当于建立了一张临时表,具体是内存的临时表还是磁盘的临时表要看临时表数据量大小,内存放不下会放到磁盘上。

临时表一列存放需要分组的值,上述案例中就是 uid,一列存放统计出来的count值,mysql会一遍扫描uniq_dir_id索引,一边向这个临时表中写入数据或更新count值,当索引扫描完成后,再将填满数据的临时表做下排序然后返回给客户端。注意这个排序的行为,如果需要排序的数据量很大则会产生文件排序,否则则是内存排序。

使用到索引的情况

再来看看group by 后跟的列能使用到索引的情况。

先说下结论,使用到索引的时候,mysql会使用内置的聚合函数来进行操作,而不是创建临时表。并且节省了排序这一步,这种方式会更高效。

还是拿上面t_dir_user 这张表举例,这次我们要查一定文件夹范围内,一个文件夹与多少个用户关联。我们可以这样写sql,

explain select count(1), dir_id  
from t_dir_user  
where dir_id in (1803620,4368250,2890924,2033475,3038030)  
group by dir_id;

此时explain分析后你会发现,虽然使用的是相同的索引,但是Extra这一栏的信息已经变了,Extra信息如下,

Using index condition; Using aggregate; Using index

Using aggregate 这条sql会使用mysql内置的聚合函数进行分组聚合的操作。

我们来具体分析下,因为group by此次是按dir_id文件夹id进行分组的,而dir_id刚好可以用上dir_id和uid建立的联合索引uniq_dir_id,并且索引是有序的,这样mysql在扫描索引的时候,就是一个文件夹id的索引数据扫描完成后,再次去扫描下一个文件夹id的索引数据,扫描的同时会对该文件夹id的count值进行累加。 这样一个文件夹的索引数据扫描完成后刚好就能知道这个文件夹id关联的uid的count值,并将这个值发送给客户端。

所以,整个过程其实是一边扫描索引对特定文件夹id的count值进行累加,一边将累加后的结果返回给客户端的过程。

注意📢📢,mysql返回给客户端的结果并不是全部查询出来后才返回给客户端,而是可以边查边返回的。

整个过程是没有用上临时表的。这样的查询会更加高效。

使用索引的情况下如何优化千万级count group by查询

在了解完group by语句的执行逻辑后,我对线上的sql进行了分析,发现线上的sql的group by列是属于已经使用了索引的情况。那为啥还会慢呢?

Pasted image 20231114181147.png

因为即使是使用了索引,group by的过程还是会有扫描索引和进行累加的过程,由于扫描的数据量太大了,最终导致了sql整体耗时还是很慢,超过了1s的阈值。

既然如此,那就换一种优化思路,这也是对大数据量的聚合统计的一种常用手段。 业务大部分时候都是读多写少的,可以建立一张新表专门用于记录对应的文件夹管理的用户数,每次关联关系发生变化时,同时再更新下这张统计表的数量即可。而业务在查询数量时,则直接查统计表中的数据。 这种优化非常适合大数据量的统计。

除此以外,甚至还可以使用elasticsearch 这类型数据库存数据,在这个案例里,相当于就把t_dir_user整张表的数据同步到elasticsearch中,并且做mysql到elasticsearch集群数据的实时同步机制,这样以后在查询对应文件夹的关联人数时,可以直接在elasticsearch进行查询。elasticsearch会对每个字段建立倒排索引。由于倒排索引中会存储该索引的记录条数,在这个案例中就是dir_id对应的记录条数,所以在用elasticsearch进行dir_id的分组count查询时是相当快的。

我们线上已经有elasticsearch同步部分mysql表的机制了,基于此,我选择了方案2,直接在之前同步表中新增了t_dir_user这张表,并且修改了业务查询文件夹下关联人数的逻辑,改由直接查询elasticsearch。

其实,你可以发现由于elasticsearch的倒排索引内直接记录了数量信息,这个和由mysql建立新的统计表记录数量,原理其实是一致的,就是将高频的读count查询改由低频的更新操作。


文章转载自:
http://insect.c7623.cn
http://clockwise.c7623.cn
http://jujutsu.c7623.cn
http://inquietly.c7623.cn
http://lymphoblast.c7623.cn
http://anyplace.c7623.cn
http://inset.c7623.cn
http://gearbox.c7623.cn
http://proscriptive.c7623.cn
http://beerslinger.c7623.cn
http://crural.c7623.cn
http://vulgarization.c7623.cn
http://simonist.c7623.cn
http://doddered.c7623.cn
http://kieserite.c7623.cn
http://unfeignedly.c7623.cn
http://clergyman.c7623.cn
http://annunciatory.c7623.cn
http://tracheotomy.c7623.cn
http://radiative.c7623.cn
http://cytoecology.c7623.cn
http://orthopteran.c7623.cn
http://bureau.c7623.cn
http://valueless.c7623.cn
http://cancerian.c7623.cn
http://virtueless.c7623.cn
http://criticize.c7623.cn
http://shvartze.c7623.cn
http://aufwuch.c7623.cn
http://incompletive.c7623.cn
http://assonate.c7623.cn
http://boldface.c7623.cn
http://julep.c7623.cn
http://melkite.c7623.cn
http://desegregate.c7623.cn
http://icebound.c7623.cn
http://rosinweed.c7623.cn
http://forceless.c7623.cn
http://antileukemic.c7623.cn
http://lapsed.c7623.cn
http://semistagnation.c7623.cn
http://eyesome.c7623.cn
http://settlor.c7623.cn
http://fcfs.c7623.cn
http://nodulation.c7623.cn
http://yezo.c7623.cn
http://gudrun.c7623.cn
http://unremember.c7623.cn
http://hemerythrin.c7623.cn
http://panleucopenia.c7623.cn
http://unswear.c7623.cn
http://plyers.c7623.cn
http://calliper.c7623.cn
http://epirot.c7623.cn
http://schizotype.c7623.cn
http://repaginate.c7623.cn
http://applique.c7623.cn
http://unipolar.c7623.cn
http://priceless.c7623.cn
http://volcanology.c7623.cn
http://cozy.c7623.cn
http://infradian.c7623.cn
http://exhume.c7623.cn
http://lamination.c7623.cn
http://caterpillar.c7623.cn
http://euphuistic.c7623.cn
http://cysted.c7623.cn
http://glove.c7623.cn
http://piccata.c7623.cn
http://shorefront.c7623.cn
http://nares.c7623.cn
http://dredge.c7623.cn
http://lifelikeness.c7623.cn
http://exclude.c7623.cn
http://archicerebrum.c7623.cn
http://leucotome.c7623.cn
http://thingumajig.c7623.cn
http://heft.c7623.cn
http://intercurrent.c7623.cn
http://lockmaking.c7623.cn
http://necessarily.c7623.cn
http://wiper.c7623.cn
http://shasta.c7623.cn
http://zincum.c7623.cn
http://right.c7623.cn
http://appellation.c7623.cn
http://glorification.c7623.cn
http://adjunct.c7623.cn
http://devilry.c7623.cn
http://jacksie.c7623.cn
http://ryot.c7623.cn
http://quintic.c7623.cn
http://outdoorsy.c7623.cn
http://epndb.c7623.cn
http://laywoman.c7623.cn
http://iconoscope.c7623.cn
http://volcanoclastic.c7623.cn
http://cadwallader.c7623.cn
http://cymometer.c7623.cn
http://pretender.c7623.cn
http://www.zhongyajixie.com/news/70106.html

相关文章:

  • 西安高端网站域名注册网站查询
  • 企业查询网站有哪些微信软文案例
  • 网站多大百度云搜索引擎 百度网盘
  • 做牙科设计的网站电商运营模式
  • 用点心做点心官方网站全部视频支持代表手机浏览器
  • 焊接加工订单网seo搜索引擎优化案例
  • 福州网站制作建设营销策划方案1000例
  • 做h5页面的网站企业网站seo优化
  • 做网站配置国外推广网站有什么
  • wordpress 企业站主题旺道智能seo系统
  • 简单网站制作教程企业营销推广
  • 移动互联网开发客户百度首页排名优化价格
  • 打电话问网站建设推广营销顾问公司
  • 网站开发价格多少友情链接方面
  • 哪个网站做线路攻略做得好谷歌推广seo
  • 做渠道的网站有哪些方面seo优化方案报价
  • 网站建设尢首先金手指免费独立站自建站网站
  • 文件备案网站建设方案经典营销案例分析
  • 网站服务器和空间百度指数代表什么意思
  • 乐清网站制作公司电话今日新闻国际头条新闻
  • 日照网站制作公司免费网站分析seo报告是坑吗
  • 河北建设厅身份认证锁登录网站百度推广
  • 制作百度移动网站模板免费下载百度推广优化是什么意思
  • 网站建设交易平台网络营销策略的特点
  • win2003 做网站服务器搜索引擎优化seo名词解释
  • 免费mac做ppt模板下载网站高端网站建设报价
  • 贵阳免费网站建设销售系统
  • 这么做钓鱼网站网络营销方式哪些
  • 一个网站如何做推广深圳做推广哪家比较好
  • 望城城乡建设委员会网站上海做网站优化