暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

索引的添加和重建

IT那活儿 2024-10-28
92
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!

背景

应业务要求,我们需要给指定的数据库的表创建索引。
创建索引之前,我们首先来了解一下MySQL索引,索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。
数据库查询是数据库的最主要功能之一。
最基本的查询算法是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时效率很低,后面又出现了例如二分查找(binary search)、二叉树查找(binary tree search)等。但每种查找算法只能应用于特定的数据结构之上,二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构,所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
了解数据库索引之前,我们可以先了解一下B+Tree,也就是B+树,MySQL普遍使用B+树实现其索引结构。
这是一个简单的B+树示意图:

由于并不是所有节点都具有相同的域,因此B+树中叶节点和内节点一般大小不同。这点与B-树不同,虽然B-树中不同节点存放的key和指针可能数量不一致,但是每个节点的域和上限是一致的,所以在实现中B-树往往对每个节点申请同等大小的空间。

InnoDB索引实现

InnoDB的数据文件本身就是索引文件。在InnoDB中,表数据文件本身就是按B+树组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
2.1 创建索引前查看数据库索引
Show index from `table_name`; ##table_name 指表名

将查询出的索引截图发给业务,经过业务允许后再进行下一步操作。
2.2 创建操作
将创建索引的语句编辑好以后,发给业务检查,业务检查同意以后再进行创建操作。
例:创建一个名为stu_id的索引在student表的stu_id字段上。

2.3 业务检查

创建以后,再次查看索引,截图发给业务,需要业务检查没问题,这样就算创建完成了。


索引重建

重建索引是一个日常的维护任务,通常情况下需要重建索引的时机包括:
  • 数据库性能下降
    当数据库的性能开始下降,比如查询速度变慢或者写入操作变慢时,可以考虑重建索引来提高数据库性能。
  • 索引碎片严重
    随着数据库的使用,索引会发生碎片化,这会导致查询效率下降。当索引碎片严重时,可以通过重建索引来优化索引结构。
  • 大量数据删除后
    当数据库中有大量数据被删除时,索引的结构可能会变得不合理,重建索引可以帮助优化索引结构,提高查询性能。
  • 数据库升级或迁移
    在数据库升级或迁移时,重建索引可以确保索引与新的数据库环境相适应,保证数据库性能。
需要注意的是,在进行重建索引时,需要谨慎操作,避免影响数据库的正常运行。建议在非高峰期进行重建索引操作,以免影响业务。
当我们接到业务需要重建索引的需求以后,首先需要与业务沟通好重建哪张表的哪个索引:
先将重建的语句编辑好,发给业务,业务同意以后,再进行重建。
1)如果是重建一张表中的指定索引
语句:
ALTER TABLE table_name DROP INDEX index_name, ADD INDEX newindex_name (column);
  • table_name:表名
  • index_name:索引名
  • Newindex_name:新索引名
  • column:字段名
例:这是重建student表中的stu_id索引。

2)如果是重建单个表中所有索引
语句:
ALTER TABLE table_name ENGINE=InnoDB;
  • table_name:表名
例:重建student中的所有索引。

重建完成以后,查看索引,发给业务检查,检查没问题以后重建完成。
例:
show index from table_name;
  • table_name : 表名


END


本文作者:吴 悔(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论