位置: 编程技术 - 正文

简单谈谈MySQL的loose index scan(mysql的基本介绍)

编辑:rootadmin

推荐整理分享简单谈谈MySQL的loose index scan(mysql的基本介绍),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简述mysql,简要叙述一下mysql是什么,简述mysql的概念及作用,mysql的基本介绍,mysql的认识,mysql的基本介绍,mysql的基本介绍,mysql的基本介绍,内容如对您有帮助,希望把文章链接给更多的朋友!

众所周知,InnoDB采用IOT(index organization table)即所谓的索引组织表,而叶子节点也就存放了所有的数据,这就意味着,数据总是按照某种顺序存储的。所以问题来了,如果是这样一个语句,执行起来应该是怎么样的呢?语句如下:

列a上有一个索引,那么按照简单的想法来讲,如何扫描呢?很简单,一条一条的扫描,这样一来,其实做了一次索引全扫描,效率很差。这种扫描方式会扫描到很多很多的重复的索引,这样说的话优化的办法也是很容易想到的:跳过重复的索引就可以了。于是网上能搜到这样的一个优化的办法:

从已经搜索到的资料看,这样的执行计划中的extra就从using index变成了using index for group-by。

但是,但是,但是,好在我们现在已经没有使用5.1的版本了,大家基本上都是5.5以上了,这些现代版本,已经实现了loose index scan:

很好很好,就不需要再用这种奇技淫巧去优化SQL了。

文档里关于group by这里写的有点意思,说是最大众化的办法就是进行全表扫描并且创建一个临时表,这样执行计划就会难看的要命了,肯定有ALL和using temporary table了。

5.0之后group by在特定条件下可能使用到loose index scan,

1

这两条sql都只需一次index seek便可返回,源于索引的有序排序,优化器意识到min/max位于最左/右块,从而避免范围扫描;extra显示Select tables optimized away ;2

执行计划type 为range(extra显示using where; using index),即执行索引范围扫描,先读取所有满足log_machine约束的记录,然后对其遍历找出max value;改进这满足group by选择loose index scan的要求,执行计划的extra显示using index for group-by,执行效果等值于

简单谈谈MySQL的loose index scan(mysql的基本介绍)

即对每个log_machine执行loose index scan,rows从原来的下降为(该表总共1,,条记录)。

Group by何时使用loose index scan&#;

适用条件:

1 针对单表操作2 Group by使用索引的最左前缀列3 只支持聚集函数min()/max()4 Where条件出现的列必须为=constant操作 , 没出现在group by中的索引列必须使用constant5 不支持前缀索引,即部分列索引 ,如index(c1())执行计划的extra应该显示using index for group-by假定表t1有个索引idx(c1,c2,c3)

而SELECT c1, c3 FROM t1 where c3= const GROUP BY c1, c2;则可以

紧凑索引扫描tight index scanGroup by在无法使用loose index scan,还可以选择tight,若两者都不可选,则只能借助临时表;扫描索引时,须读取所有满足条件的索引键,要么是全索引扫描,要么是范围索引扫描;Group by的索引列不连续;或者不是从最左前缀开始,但是where条件里出现最左列;

5.6的改进事实上,5.6的index condition push down可以弥补loose index scan缺失带来的性能损失。KEY(age,zip)

根据key_len=4可以推测出sql只用到索引的第一列,即先通过索引查出满足age (,)的行记录,然后从server层筛选出满足zip约束的行;pre-5.6,对于复合索引,只有当引导列使用"="时才有机会在索引扫描时使用到后面的索引列。

对比一下查询效率

对于第二条sql,可以使用union改写,

而mysql5.6引入了index condition pushdown,从优化器层面解决了此类问题。

Mysql全局ID生成方法 生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在单表/数据库数据量过大,更新量不

基于MySql的扩展功能生成全局ID 本文利用MySQL的扩展功能REPLACEINTO来生成全局id,REPLACEINTO和INSERT的功能一样,但是当使用REPLACEINTO插入新数据行时,如果新插入的行的主键或唯一键(UNIQUE

MySQL用作备份还原的导入和导出命令用法整理 mysqldump命令行导出数据库:1,进入MySQL目录下的bin文件夹:cdMySQL中到bin文件夹的目录如我输入的命令行:cdC:ProgramFilesMySQLMySQLServer4.1bin2,导出数据库

标签: mysql的基本介绍

本文链接地址:https://www.jiuchutong.com/biancheng/312424.html 转载请保留说明!

上一篇:Windows7下如何在命令行使用MySQL(windows7怎么操作)

下一篇:Mysql全局ID生成方法(mysql自动生成id)

  • 房地产预缴增值税计算方式
  • 半年奖个人所得税怎么算的
  • 预缴增值税需要预缴城建税吗
  • 已知税金及附加怎么算增值税
  • 小规模纳税人所得税税率是5还是2.5
  • 分公司财务负责人和总公司财务负责人
  • 经营者个人所得税申报
  • 汇总记账凭证长什么样
  • 国债和国债期货的交割价是净价还是全价?( )
  • 税前利润总额的计算公式
  • 经济补偿金也需要交个人所得税吗?
  • 公司预付签证费怎么入账
  • 报废物资收入计入什么科目旧准则
  • 公司办的中石化油卡可以查视频记录吗
  • 如何区分餐费发票和停车费发票?
  • 长期租赁存在的主要原因为什么是节税
  • 退税显示未完成怎么处理
  • 印花税少于1元怎么处理
  • 企业所得税预缴计算方法
  • 增值税税率如何计算
  • 汇票贴息会计分录
  • 折价购买债券是什么意思
  • 合作经营收入分成发票税务名称怎么填
  • 销售蔬菜免税账务处理
  • 电子承兑没接收多久失效
  • 筹建期间的开办费包括哪些
  • 其他应付款和其他应交款区别
  • 预提未收的租金怎么入账
  • 企业接受投资者的土地使用权投资
  • win11系统更新卡在25%
  • 应收账款贷方余额怎么在资产负债表中填列
  • 金融工具中股利是什么
  • macbook无法调节音量
  • 在途物资退货会退款吗
  • 翡翠湾攻略
  • 非正常损失的存货进项税额转出
  • 长期借款的
  • tp6 分页
  • 红字怎么看
  • 数据库锁面试题
  • php中array用法
  • 关于我和鬼变成家人的那件事
  • python卡方分布随机数
  • 增值税小规模纳税人适用3%征收率
  • 电子发票应如何打印出来
  • 公司注销未分配利润如何处理
  • 一般纳税人企业所得税怎么征收
  • 其他应付款付不出去怎么处理好
  • 预付账款怎么记账
  • 职工釆暖费有何新政策
  • 帮客户代付保证金合法吗
  • 退休人员基本养老金包括哪些
  • 现金日记账年结怎么划线
  • 预缴的增值税在增值税附表四怎么填
  • 营改增涉及哪些项目
  • 购入固定资产的增值税计入成本吗
  • 什么叫做对公转账
  • 执行企业会计准则的非上市企业
  • 如何监测和优化电池寿命
  • mysql zip archive 版本(5.7.19)安装教程详细介绍
  • sqlserver存储过程怎么查看
  • jmeter怎么连接数据库
  • 通过修改注册表修改edge主页
  • task运行在哪个工作单元
  • mac开机慢开机以后特别卡
  • 在windows xp
  • windowsxp的设置在哪
  • window10隐私常规设置
  • 怎么才能把win7变win10
  • win70x80070002系统找不到指定的文件
  • perl字符串长度函数
  • cocos2dx官方教程
  • python多进程并发http请求
  • unity调用c++封装的dll
  • pygame如何加载图片
  • particular粒子怎么用
  • js中unbind
  • jQuery实现的可编辑表格完整实例
  • 小规模纳税人可以用专票抵扣税吗
  • 红股派息是赠送股票的意思吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设