SQL优化之避免全表扫描

  • 时间:
  • 浏览:1
  • 来源:彩神大发APP_神彩大发APP官方

对于小数据量的表,表扫描通常是至少的。对于大数据量的表,可不都可不可以尝试以下技术来正确处理优化器发生全表扫描:

1、通过“ANALYZE TABLE tb_name”语句更新表上的索引统计信息;对于innodb表和myisam表来说,执行该语句可不都可不可以 加表级S锁;

2、使用 “FORCE INDEX”语句强制走索引,告诉优化器走该索引更至少;

3、修改max_seeks_for_key参数值,类事:SET max_seeks_for_key=30000。该参数的含义:根据键查找行时,限制假定的最大查找次数;通过调低该参数值,以使优化器更喜欢索引而都是表扫描。

在mysql5.6官方文档中关于full table scan的介绍如下:

在表数据非常大时,全表扫描往往是灾难性的。当explain输出的type列的值为ALL时,表示這個步发生了全表扫描操作。一般经常经常出现以下条件可不都可不可以 发生全表扫描:

1、表数据量很小,走索引查询比全表扫描更麻烦;这对于少于10行且行长度较短的表来说很常见;

2、SQL的on子句但会 where子句涉及到的列上那么索引;

3、将索引列与常量值进行比较,但会 MySQL但会 计算(基于索引树)常量覆盖了表中过多的一次责,而表扫描会调快。换言之,即便字段挑选性高且有索引,但要取出的数据行过多,但会 会走索引,這個比例一般是20%-300%;

4、对于低挑选性的索引列,一个多多键值但会 会匹配N多行数据,這個以前但会 走索引而发生全表扫描。

大意:

Full table scan是并都是都要读取表完全数据的操作,常见于读取小表的完全内容,但会 在数仓中查询大表所有数据用以分析或聚合。

索引的目的是允许在一个多多大表中查找特定的值或值的范围,从而在实际操作时正确处理全表扫描。

猜你喜欢

在.NetCore中使用Myrmec检测文件真实格式

github地址:https://github.com/rocketRobin/myrmecnuget地址:https://www.nuget.org/packages/Myr

2020-03-22

目前哪些手机可以无线充电怎么无线充电

三星S10Plus华为Mate20Pro无线充电,是近一两年来在旗舰手机上经常出显的俩个 多功能,当然,目前来看,搭载无线充电功能的手机还不过多,我来推荐几款。华为Mate2

2020-03-22

阿里云CDN直播架构与双11晚会直播实战

电商直播的最佳实践猫晚流量再创记录,阿里云直播方案护航优酷21150万用户体验【云栖精选11月刊】揭秘双11肩头的互联网技术超级工程阿里云跨界商务媒体合作芒果TV看明星也用云计

2020-03-21

国美 京东 天猫 苏宁在哪个买电器便宜靠谱?

下载百度知道APP,抢鲜体验至于价格展开完整性使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。不得劲推荐为你推荐:基本差太满换一换你对这种回答的评价是

2020-03-21

2019年即将进入尾声,你的2020年最想做什么事?

3、找到俩个 多多 可不还要长期发展的行业并现在结速投资。不怎么推荐展开全部8、希望我的第7条可不还要实现。5、希望我中间的1234条都能实现。使用百度知道APP,立即抢鲜

2020-03-21