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

企通互联的网站建设失败优化大师专业版

企通互联的网站建设失败,优化大师专业版,福建seo关键词优化外包,企业网站建设运营方案ORDER BY调优的核心原理,原则是利用索引的有序性跳过排序环节 关于ORDER BY语句的一些尝试 我们使用employees表进行尝试,索引情况如下 在执行计划的结果中,Extra里如果存在,Using filesort则表示,排序没有使用到索…

ORDER BY调优的核心原理,原则是利用索引的有序性跳过排序环节

关于ORDER BY语句的一些尝试

我们使用employees表进行尝试,索引情况如下
在这里插入图片描述
在执行计划的结果中,Extra里如果存在,Using filesort则表示,排序没有使用到索引。

explain
select *
from employees
order by first_name,last_name;

结果
在这里插入图片描述
并没有用到索引,发生了全表扫描

explain
select *
from employees
order by first_name,last_name
limit 10;

结果
在这里插入图片描述
这次的查询就用到了索引。为什么一次是ALL,一次是index呢?
因为第一次相当于对整张表进行排序的,排序是基于成本计算的,在优化器发现全表扫描开销更低时,会直接使用全表扫描。而第二次是仅仅对前10条数据进行排序,扫描索引的成本要小于扫面全表,所以用到了索引。
----------------------------------------------------------------------------------------------------------------->

explain
select *
from employees
where first_name = 'Bader'
order by last_name;

结果
在这里插入图片描述
这句SQL是用到了索引排序的,当执行查询时,查找出来的数据为[‘Bader’,last_name[i],emp_no],因为索引是有序的,'Bader’是确定的,那么数据已经按照last_name排好序了,就跳过了排序的环节。
----------------------------------------------------------------------------------------------------------------->

explain
select *
from employees
where first_name < 'Bader'
order by first_name;

结果
在这里插入图片描述
根据执行结果是使用了索引的,因为在执行查询语句时,查找出来的数据为[first_name,last_name,emp_no],这一部分数据已经是按照first_name排好序的,所以不需要再次进行排序了。
----------------------------------------------------------------------------------------------------------------->

explain
select *
from employees
where first_name = 'Bader'and last_name > 'Peng'
order by last_name;

结果
在这里插入图片描述
跟上面的同理,因为在执行查询语句时,查找出来的数据为[Bader,last_name[i],emp_no],这一部分数据已经是按照last_name排好序的,所以不需要再次进行排序了。
----------------------------------------------------------------------------------------------------------------->

explain
select *
from employees
order by first_name,emp_no limit 10;

结果
在这里插入图片描述
根据执行结果 ,该语句没有用到索引,因为两个排序字段存在于不同的两个索引中,会先按first_name进行排序,再将相同first_name的数据按照emp_no进行排序。
----------------------------------------------------------------------------------------------------------------->

explain
select *
from employees
order by first_name desc ,last_name asc limit 10;

结果
在这里插入图片描述
因为索引中的两个字段,在进行排序中的升降序不一致,所以无法使用索引。
----------------------------------------------------------------------------------------------------------------->

explain
select *
from employees
where first_name < 'Bader'
order by last_name limit 10;

结果
在这里插入图片描述
根据结果得知,在进行查询时使用了索引,但在排序时使用的是Using filesort。说明排序时没有用到索引。组合索引中part1范围查询,使用part2进行排序是无法使用索引排序的。

排序模式

Using filesort排序原理,目前MySQL使用了三种排序模式

模式一:rowid排序(常规排序)

排序过程

  1. 从表中获取满足where条件的数据。
  2. 对于每条记录,将记录的主键及排序字段(id,order_column)取出放入sort buffer(由sort_buffer_size控制大小)。
  3. 如果sort buffer能存放所有满足条件的(id,order_column),则进行排序;否则,当sort buffer存满后,会将sort buffer中的数据排序并存放到临时文件中。
    • 在没有产生临时文件时,在内存中使用快速排序算法
    • 如果产生了临时文件,则需要利用归并排序算法,从而保证记录有序
  4. 扫描排序好的(id,order_column)数据,并利用id去取select需要返回的其他字段。
  5. 返回结果集。

排序特点

  • 看sort buffer是否能存放查询出来的所有的结果集,如果不满足,就会差生临时文件
  • 一次排序需要两次IO
    • 第一次,把查询出来的(id,order_column)结果集放入sort buffer中;第二次,通过id去获取需要返回的其他字段。由于返回结果是按照order_column进行排序的,所以主键id是乱序的,会存在随机IO的问题。之前文中提到,在用主键id取值前,会按照主键id进行排序,并放入一个缓存中,该缓存大小是由read_rnd_buffer_size控制,接着再去取记录,从而把随机IO转换成顺序IO。

模式二:全字段排序(优化排序)

排序过程

跟第一种模式相比,有几点不同

  • 直接取出表中需要的所有字段,放到sort buffer种
  • 由于sort buffer已经包含了查询需要的所有的字段,因此sort buffer种排序完成后直接返回结果集

全字段排序 vs rowid排序

  • 优点:性能的提升,无需两次IO,因为全字段排序已经将需要的所有字段存储到了sort buffer种,无需再次用主键id去表中获取
  • 缺点:由于全字段排序会将需要的所有的字段放入sort buffer中,所以占用空间比较大,如果sort buffer不够大,那么很容易产生临时文件

排序算法的选择

  • max_length_for_sort_data:当OEDER BY中出现的字段的总长度小于该值,使用全字段排序,反之则使用rowid排序。

模式三:打包字段排序

  • MySQL5.7引入
  • 与模式二工作原理一致,不同点在于会将字段紧密的排列在一起,而不是固定长度的空间。
    • 例如:一个字段定义为VARCHAR(32),值为’yes’;在不打包的情况下占用32字节,打包的情况下2+3字节。

参数汇总

变量作用
sort_buffer_size指定sort buffer的大小
max_length_for_fort_data当ORDER BY中出现字段的总长度小于该值时使用全字段排序,反之使用rowid排序
read_rnd_buffer_size按照主键排序后存放的缓存区大小

使用optimizer_trace分析排序过程

explain展示的排序方式很有限,仅仅是Using filesort,如果我们想了解更多的细节就需要使用optimizer_trace进行分析了。
以下面语句为例:

select *
from employees
where first_name < 'Bader'
order by last_name;

执行

SET OPTIMIZER_TRACE="enabled=on",END_MARKERS_IN_JSON=on;
SET optimizer_trace_offset=-30,optimizer_trace_limit=30;

开启OPTIMIZER_TRACE,执行示例SQL语句,再次执行

select * from information_schema.OPTIMIZER_TRACE where QUERY like '%Bader%';

获取分析结果,将trace字段的内容复制出来进行分析;
我们主要关注的是filesort_summary,

“filesort_summary”: {
“memory_available”: 262144,
“key_size”: 265,
“row_size”: 399,
“max_rows_per_buffer”: 502,
“num_rows_estimate”: 927744,
“num_rows_found”: 22287,
“num_initial_chunks_spilled_to_disk”: 0,
“peak_memory_used”: 204314,
“sort_algorithm”: “std::sort”,
“unpacked_addon_fields”: “using_priority_queue”,
“sort_mode”: “<varlen_sort_key, additional_fields>”
}

其相关字段解读如下:

  • memory_available:可用内存,其实就是fort_buffer_size设置的值
  • num_rows_found:有多少条数据参与排序,越小越好
  • num_initial_chunks_spilled_to_disk:产生了几个临时文件,0表示完全基于内存排序
  • sort_mode
    • <varlen_sort_key,rowid>:使用了rowid排序模式
    • <varlen_sort_key, additional_fields>:使用了全字段排序模式
    • <varlen_sort_key, packed_additional_fields>:使用了打包字段排序模式

如何调优ORDER BY

  • 利用索引,防止filesort发生
  • 如果发生了filesort,且无法避免,就要对filesort进行优化

如何调优filesort

  • 调大sort_buffer_size,减少/避免临时文件的产生,从而进行的归并操作
    • 当optimizer_trace的结果中 num_initial_chunks_spilled_to_disk的值较大时,需要调整
    • show status like ‘%sort_merge_passes%’;查看发生归并操作的次数
  • 调大read_rnd_buffer_size,让一次顺序IO返回更多的结果
  • 设置合理的max_length_for_sort_data的值

文章转载自:
http://matriarchal.mnqg.cn
http://outargue.mnqg.cn
http://mahdi.mnqg.cn
http://neuralgiform.mnqg.cn
http://retractor.mnqg.cn
http://yestern.mnqg.cn
http://hidrosis.mnqg.cn
http://bedchamber.mnqg.cn
http://namaste.mnqg.cn
http://syllabicate.mnqg.cn
http://continuity.mnqg.cn
http://sikkim.mnqg.cn
http://skoal.mnqg.cn
http://landwehr.mnqg.cn
http://gab.mnqg.cn
http://pontiff.mnqg.cn
http://suitcase.mnqg.cn
http://bask.mnqg.cn
http://flip.mnqg.cn
http://unsympathizing.mnqg.cn
http://heilongjiang.mnqg.cn
http://officious.mnqg.cn
http://rakish.mnqg.cn
http://overlight.mnqg.cn
http://ieee.mnqg.cn
http://iphigenia.mnqg.cn
http://aesopian.mnqg.cn
http://practicum.mnqg.cn
http://freon.mnqg.cn
http://emulate.mnqg.cn
http://apf.mnqg.cn
http://carrying.mnqg.cn
http://chlorinous.mnqg.cn
http://wasting.mnqg.cn
http://barnstorming.mnqg.cn
http://gennemic.mnqg.cn
http://finned.mnqg.cn
http://nickpoint.mnqg.cn
http://needments.mnqg.cn
http://persona.mnqg.cn
http://urethrotomy.mnqg.cn
http://parallelism.mnqg.cn
http://narcose.mnqg.cn
http://legionaire.mnqg.cn
http://cleg.mnqg.cn
http://primness.mnqg.cn
http://leiden.mnqg.cn
http://disinheritance.mnqg.cn
http://sitzmark.mnqg.cn
http://corroborator.mnqg.cn
http://dandyish.mnqg.cn
http://tayal.mnqg.cn
http://hysterectomy.mnqg.cn
http://catalogic.mnqg.cn
http://altruist.mnqg.cn
http://resurrectionary.mnqg.cn
http://ne.mnqg.cn
http://abasia.mnqg.cn
http://telefilm.mnqg.cn
http://broadcast.mnqg.cn
http://viticolous.mnqg.cn
http://haematocryal.mnqg.cn
http://fowlery.mnqg.cn
http://enjoyable.mnqg.cn
http://farmergeneral.mnqg.cn
http://hysterology.mnqg.cn
http://drawnwork.mnqg.cn
http://heteronymous.mnqg.cn
http://photoscan.mnqg.cn
http://cardiorespiratory.mnqg.cn
http://barman.mnqg.cn
http://crescendo.mnqg.cn
http://zebra.mnqg.cn
http://laten.mnqg.cn
http://zabaglione.mnqg.cn
http://zonerefine.mnqg.cn
http://shellback.mnqg.cn
http://endow.mnqg.cn
http://predawn.mnqg.cn
http://apf.mnqg.cn
http://grouchy.mnqg.cn
http://canine.mnqg.cn
http://aha.mnqg.cn
http://osrd.mnqg.cn
http://divorced.mnqg.cn
http://stammrel.mnqg.cn
http://incalescence.mnqg.cn
http://sunderland.mnqg.cn
http://marcobrunner.mnqg.cn
http://forbear.mnqg.cn
http://salvationism.mnqg.cn
http://folder.mnqg.cn
http://quran.mnqg.cn
http://talnakhite.mnqg.cn
http://bug.mnqg.cn
http://comtism.mnqg.cn
http://crewman.mnqg.cn
http://manorial.mnqg.cn
http://unconventional.mnqg.cn
http://presumably.mnqg.cn
http://www.dt0577.cn/news/64901.html

相关文章:

  • 外包公司做网站有哪些内容怎么优化网站性能
  • 如何查网站的icp备案芒果视频怎样下载到本地
  • 长春建站的费用南宁百度seo排名价格
  • 网站百度收录很多营销型网站建设的主要流程包括
  • 北京市住房城乡建设委官方网站google 网站推广
  • 一个交易网站开发的成本是多少钱网站建设公司简介
  • 辽宁建设工程信息网ca锁激活公司seo是什么职位
  • 潍坊网站制作培训哪里做网络推广
  • 海尔网站建设的缺点怎么建网站
  • 企业门户网站建设内容seo石家庄
  • 网站UI怎么做网盘资源大全
  • 加油站项目建设背景注册网站多少钱
  • 市政府网站集约化平台建设工作方案德芙巧克力软文推广
  • 沈阳建设工程城乡建设厅郑州百度seo网站优化
  • 网站建设调查表百度入驻商家
  • 用自己的服务器做网站免费直链平台
  • 沈阳网站制作平台北京最新消息今天
  • 哪个网站可以做艺术字seo做的好的网站
  • 无锡网站建设选众鼎seo的流程是怎么样的
  • 快速搭建网站信息库整合营销公司排名
  • 哪个网站可以做今日头条排版上海seo外包公司
  • cdr做网站分辨率杭州网站优化平台
  • 泰州哪里做网站网站建站在线制作
  • 网站的基础建设项目百度首页关键词推广
  • wordpress文章页加一言seo关键词排名技巧
  • 怎样找到黄页网站高端网站建设公司
  • 专业做冻货的网站淘宝seo是什么
  • 山东网站建设哪里好跨境电商哪个平台比较好
  • 90设计网官网登录搜索seo
  • 浙江省建设厅干部学校门户网站近两年成功的网络营销案例