mysql ttl索引_MySQL源码:索引相关的数据结构(前篇)_MySQL - key

9c98fe03383ffeca78ca12f3181f2137.png

...dis->ping(); //检查是否还再链接,[+pong]$redis->ttl('key');//查看失效时间[-1 | timestamps]$redis->persist('key');//移除失效时间[ 1 | 0]$redis->sort('key',[$array]);//返回或保存给定列表、集合、有序集合key中经过...

本文将尝试介绍MySQL索引存储相关的数据结构。程序=数据结构+算法,了解数据结构,然后就可以进一步了解MySQL源码中如何使用索引,如何选择自己的执行计划。

1. MYSQL如何描述某个数据表的索引

MySQL使用TABLE对象来描述一个数据表,那么数据表的索引是如何描述,索引的统计信息又是如何存储的呢? 例如我们有如下数据表:CREATE TABLE `users` (`id` int(11) NOT NULL,`nick` varchar(32) DEFAULT NULL,`reg_date` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `IND_NICK` (`nick`),KEY `IND_REGDATE` (`reg_date`))CREATETABLE`users`(

`id`int(11)NOTNULL,

`nick`varchar(32)DEFAULTNULL,

`reg_date`datetimeDEFAULTNULL,

PRIMARYKEY(`id`),

KEY`IND_NICK`(`nick`),

KEY`IND_REGDATE`(`reg_date`))

该表有索引,PRIMARY KEY、IND_NICK、IND_REGDATE,我们来看看MySQL内部是如何存储这三个索引,以及如何使用这些索引的统计信息的。下图,描述了存储一个数据表索引的主要结构:MySQL使用TABLE对象描述一个数据表,他的成员key_info(类型为KEY)描述这个表的全部索引

key_info是一个数组,每一个元素是一个KEY(vim -t KEY查看)对象,代表了一个索引,顺序的,整个数组代表了这个表的全部索引

key_info(KEY对象)的成员key_part,是指向KEY_PART_INFO数组的指针,该数组描述了某个索引所有的索引列信息,数组的每个元素代表了一个索引列

最后,key_part的成员field指向该索引列对应的数据表字段

2. GDB打印观察索引信息

2.1 打印索引基本信息

某个索引(例如IND_NICK)的基本信息是存储在KEY结构(table->key_info数组)中,这里,我们来打印索引IND_NICK的基本信息来观察KEY结构:(gdb) p s->table->key_info[1]$26 = {key_length = 67, flags = 104, key_parts = 1, extra_length = 3, usable_key_parts = 1, block_size = 1024, algorithm = HA_KEY_ALG_UNDEF, {parser = 0x0, parser_name = 0x0}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值