MySQL内核技术之"Table结构与操作"

本文探讨了MySQL中Table结构与操作的核心过程。从SQL语句开始,解析如何从lex结构到TableList,并详细阐述了open_table()函数在优化阶段的角色。在SQL执行前,MySQL会检查Table Cache,若已有所需Table则直接使用,减少资源开销。open_table()先于优化操作执行,确保Table在后续处理中的高效利用。
摘要由CSDN通过智能技术生成

谈到Table,我们首先从SQL语句说起,因为围绕Table的所有操作都是由SQL触发的。设想一下,我们有如下SQL语句:

SELECT * FROM t1, t2 WHERE t1.a<10 AND t2.b < 20

这条语句涉及到两个table:t1 和 t2。在MySQL涉及到如下数据结构来操作上面SQL语句:

Table
TableList
TableCache
TableCacheManager

回到上面的SQL。语法解析后,query会带上一个成员变量TableList* table_list。TableList结构如下:

struct TABLE_LIST {
 ...
  Table* table;

  /* link in a global list of all queries tables */
  TABLE_LIST *next_global, **prev_global;
  const char *db, *table_name, *alias;
}
可以看到,TABLE_LIST结构实际上是list上的一个table节点(我觉得叫TABLE_LIST_NODE更加合适)。


当一个SQL被parse后成为lex结构,该结构就带了一个TABLE_LIST成员变量TableList* table_list。如果只有一个table的话,table_list就只有一个节点。对应的table_name和db都会被置上。但是table* 是为空的,因为初始状态table还没有被

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值