加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

深入理解select count(*)底层究竟做了什么

发布时间:2019-06-15 04:14:44 所属栏目:编程 来源:Java技术架构
导读:SELECT COUNT( * ) FROM t是个再常见不外的 SQL 需求了。在 MySQL 的行使类型中,我们一样平常行使事宜引擎 InnoDB 作为(一样平常营业)表的存储引擎,在此条件下,COUNT( * )操纵的时刻伟大度为 O(N),个中 N 为表的行数。 而 MyISAM 表中可以快速取到表的行数。这

Q:MyISAM 与 InnoDB 在 COUNT( * ) 操纵的执行进程在那边开始分道扬镳?

  • 共性:共性存在于 SQL 层,即 SQL 理会之后的数据布局是同等的,count 变量都是存在于作为功效列的 Item_sum_count 范例工具中;返回给客户端的进程也相同 – 对该 count 变量举办赋值并经过 MySQL 通讯协议返回给客户端。
  • 区别:InnoDB 的 count 值计较是在 SQL 执行阶段举办的;而 MyISAM表自己在内存中有一份包括了表 row_count 值的 meta 信息,在 SQL 优化阶段通过存储引擎的标志给优化器一个 hint,表白该表所用的存储引擎生涯了准确行数,可以直接获取到,无需再进入执行器。

深入领略select count(*)底层毕竟做了什么

Q:InnoDB 中为何无法向 MyISAM 一样维护住一个 row_count 变量?

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读