深入理解select count(*)底层究竟做了什么
|
相关调用栈参考如下:
二、数据结构: Q:count 值存储在哪个内存变量里? A:SQL 解析后,存储于表达 COUNT( * ) 这一项中,((Item_sum_count*)item_sum)->count 如下图所示回顾我们之前“COUNT( * )前置流程”部分提到的 JOIN 结构。
即 SQL 解析器为每个 SQL 语句进行结构化,将其放在一个 JOIN 对象 ( join ) 中来表达。在该对象中创建并填充了一个列表 result_field_list 用于存放结果列,列表中每个元素则是一个结果列的 ( Item_result_field*) 对象 ( 指针 ) 。 在 COUNT( * )-case 中,结果列列表只包含一个元素,( Item_sum_count: public Item_result_field ) 类型对象 ( name = “COUNT( * )”),其中该类所特有的成员变量 count即为所求。 三、MyISAM 全表 COUNT( * ) 由于 MyISAM引擎并不常用于实际业务中,仅做简要描述如下:
四、几个问题 Q:MyISAM 与 InnoDB 在 COUNT( * ) 操作的执行过程在哪里开始分道扬镳?
Q:InnoDB 中为何无法向 MyISAM 一样维护住一个 row_count 变量? (编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |




