mysql - MySQL 的 dict_col_struct 中的 ord_part 是什么?

标签 mysql innodb

我试图理解 dict_col_t 结构中的变量 ord_part。

声明如下:

http://osxr.org/mysql/source/storage/innobase/include/dict0mem.h#0428 

表示未签名

 ord_part:1; /*!< nonzero if this column   appears in the ordering fields
              of an index */

由于没有意义,所以我在源代码中搜索所有用例中的ord_part

http://osxr.org/mysql/source/storage/innobase/row/row0row.cc#0134

http://osxr.org/mysql/source/storage/innobase/row/row0row.cc#0352

http://osxr.org/mysql/source/storage/innobase/dict/dict0dict.cc#1949

http://osxr.org/mysql/source/storage/innobase/dict/dict0dict.cc#2308

最后一个链接是唯一一个ord_part变成1的地方,当我们加上索引的时候,这个变量就变成了1。根据其他链接,我感觉1表示我们存储的是secondary key的前缀。

有人熟悉这个变量吗?这个变量是如何工作的?

最佳答案

仔细研究源码后,这里是我的答案

ord_part 本身没有任何意义。当我们添加索引时,它将始终变为 1。如果此列上有索引,则 ord_part 必须为 1。但是,如果 ord_part 为 1,则并不意味着此列上必须有索引。这是 MySQL 错误(https://bugs.launchpad.net/percona-server/+bug/1469901)。

它必须与其他变量或函数一起使用。当它们一起工作时,InnoDB 可以从外部页面获取实际数据。

有用的源代码: http://osxr.org/mysql/source/storage/innobase/row/row0row.cc#0058

关于mysql - MySQL 的 dict_col_struct 中的 ord_part 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343702/

相关文章:

mysql - 在 phpMyAdmin 中跨多个语句执行事务

mysql - 如何为列选择优化数据类型 [innodb specific]?

mysql - 错误1005(HY000): Can't create table './quotes/actions.frm' (errno: 150)

mysql - 从较小的任务关键型表更新大表,而不锁定小表

mysql - 为什么 INNODB 批量插入会导致自动增量主键跳过值?

mysql - 删除mysql查询

mysql - 用户输入位置 - 如何循环包含路线的数据库

mysql - 根据Microsoft SQL Server中其他表中的行的位置排列一个表的列

mysql - 如何搜索包含150+列的Mysql表?

python - 如何从 docker 容器中的 python 脚本连接到本地主机上的 mysql 数据库