首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏飞天小牛肉

    主键、聚集索引辅助索引

    所以,不要说 “主键就是聚集索引”,应该这样说:“聚集索引一般都是加在主键上的”。 聚集索引辅助索引的关系 辅助索引(Secondary Index)也称为 非聚集索引、二级索引。 也就是说,辅助索引的叶子节点包含的是:每行数据的辅助索引键 + 该行数据对应的聚集索引键。 当通过辅助索引来寻找数据时,InnoDB 存储引擎会先遍历辅助索引并通过叶子节点获得某个辅助索引键对应的聚集索引键,然后再通过聚集索引来找到一个完整的行记录。 举个例子,如果在一棵高度为 3辅助索引树中查找数据,那需要对这棵辅助索引树遍历 3 次找到指定聚集索引键,如果聚集索引树的高度同样为 3,那么还需要对聚集索引树进行 3 次查找,最终找到一个完整的行数据所在的页 另外,很显然的是,辅助索引的存在并不影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引

    1.2K10编辑于 2022-02-23
  • 来自专栏IT专栏

    MySQL中InnoDB引擎的辅助索引扩展

    不少的书或博客,在介绍InnoDB引擎索引原理的时候,都会给出如下类似的两幅图(比如参考博客2和3): 由图可知,主键索引辅助索引(二级索引)分别是一棵B-树和B+树。 而对于辅助索引,非叶子节点只存储辅助索引对应的索引字段,而叶子节点的data字段存储主键索引的值。 所以当我们需要根据辅助索引查找行记录时,需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。 | c | +---+---+---+ | 2 | 1 | 1 | | 2 | 2 | 1 | | 3 | 2 | 1 | | 3 | 3 | 1 | | 1 | 1 | 2 | +---+---+-- 但当我们按照辅助索引查询时,查询的结果是先按按辅助索引从小到大排序,辅助索引值相同时则是按主键索引从小到大排序。那InnoDB是如何做到这一点的呢?这就涉及到本文要讲的辅助索引索引扩展特性。

    1.3K20发布于 2021-11-22
  • 来自专栏JAVA乐园

    MySQL 聚簇索引 二级索引 辅助索引(上两期中奖名单)

    MySQL中每个表都有一个聚簇索引( clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引( secondary indexes )。 以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引。如果表上定义有主键,那么该主键索引是聚集索引。 这种数据结构,就是索引。 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。 如果没有使用聚族索引,则每封邮件都可能导致一次磁盘I/O; 数据访问更快。聚族索引索引和数据保存在同一个B-Tree中,因此从聚族索引中获取数据通常比在非聚族索引中查找更快。 二级索引访问需要两次索引查找,而不是一次。 有关二级索引需要两次索引查找的问题? 答案在于二级索引中保存的“行指针”的实质。

    1.1K20发布于 2020-06-22
  • 来自专栏兜兜毛毛

    MySQL 索引3

    3. 平衡二叉树(AVL Tree) 平衡二叉树的定义:左右子树深度差绝对值不能超过1。 什么意思呢?比如左子树的深度是2,右子树的深度只能是1或者3。 https://www.cs.usfca.edu/~galles/visualization/BTree.html 比如MaxDegree(路数)是3的时候,我们插入数据1、2、3,在插入3的时候,本来应该在第一个磁盘块 把中间的数据2提上去,把1和3变成2的子节点。 ? 从这个里面我们也能看到,在更新索引的时候会有大量的索引的结构的调整,所以解释了为什么我们不要在频繁更新的列上建索引,或者为什么不要更新主键。 在查找数据时一次页的查找代表一次IO,也就是说,一张2000万左右的表,查询数据最多需要访问3次磁盘。 所以在InnoDB中B+树深度一般为1-3层,它就能满足千万级的数据存储。 索引的创建 1、在用于where判断order排序和join的(on)字段上创建索引 2、索引的个数不要过多。——浪费空间,更新变慢。 3、区分度低的字段,例如性别,不要建索引

    56920发布于 2020-08-11
  • 利用Skeema与AI辅助优化MySQL索引的实践与思考

    传统索引优化面临的挑战传统的索引优化需要DBA或开发人员手动分析查询模式、数据分布和基数,然后设计合适的索引。 这个过程存在几个痛点:需要深厚的数据库内部知识多列索引的列顺序选择困难难以平衡查询性能与写入开销缺乏对未来查询模式的预见性AI辅助工具的选择:Skeema + 内置AI建议经过调研,我选择了Skeema 有次它建议为一个极少使用的查询添加索引,我选择忽略这个建议,因为维护索引的开销大于收益。索引维护成本:添加索引会增加写操作的开销。 覆盖索引的优化:对于频繁查询,考虑使用覆盖索引避免回表:-- AI建议的覆盖索引ALTER TABLE orders ADD INDEX idx_covering (user_id, status, create_time /bin/skeema index advise --environment production --output report.txt总结通过Skeema的AI辅助索引优化,我们系统性地解决了订单查询的性能瓶颈

    28910编辑于 2025-09-11
  • 来自专栏一个会写诗的程序员的博客

    聚合索引辅助索引有什么区别?【BAT 面试题宝库附详尽答案解析】

    辅助索引 在MyISAM中,主索引辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。下图在Col2上建立一个辅助索引 ? 2 辅助索引 辅助索引(Secondary Index,也称为非聚集索引). InnoDB的所有辅助索引都引用主键作为data域。下图为定义在Col3上的一个辅助索引 ? 辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。 InnoDB 的索引能提供一种非常快速的主键查找性能。 不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大 书签就是相应行数据的聚集索引键(主键)。 当通过辅助索引来寻找数据时,InnoDB存储引擎会遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整的行记录。

    2.7K41发布于 2019-12-20
  • 来自专栏逸鹏说道

    维护索引3)——通过重建索引提高性能

    前言: 重建一个索引只是在内部删除并重建索引,使得碎片消失、统计信息更新、物理顺序重新排列组织。它会压缩数据页,按照填充因子填充适当的数据。如果有需要,也会添加新的数据页。 准备工作: 首先先要决定是否达到了重建索引的临界值。否则,重组索引会更好。当碎片超过30%,那么重建索引会比较好。 重建索引有两种方式,在重建之前应该考虑使用哪种会更好: 1、 脱机:脱机重建索引是默认选项。它会锁住整个表,知道重建结束,没有人可以访问这个表。如果表非常大,这将持续几个小时甚至更久。 注意:是否联机重建索引只有开发版和企业版可用。其他版本只有脱机重建。 因为重建大表索引会非常耗时,所以不要不耐烦并停止重建操作,这样会引起一些危险的后果,并可能使得数据库进入恢复模式。 重建索引需要有sysadmin、db_onwer或者db_ddladmin角色。

    1.2K40发布于 2018-04-11
  • 来自专栏小工匠聊架构

    MySQL-索引优化篇(3)_利用索引优化锁

    ---- 利用索引优化锁 为什么索引能优化锁 Innodb采用的行级锁,只有在修改行时才会对需要修改的行加锁。 但是这种情况只有在Innodb层过滤掉不需要的行是才有效。 所以利用索引可以过滤掉不需要的数据, 使用索引的话,仅需要锁定被索引检索出来的数据,而不是锁定全部数据,从而达到优化锁的目的。 索引可以减少锁定的行数 索引可以加快处理速度,同时也加快了锁的释放 ---- 演示 举个例子 (演示锁, 肯定需要两个会话了) 无索引的情况 (获取不同的数据 发生了阻塞) session 1 : mysql 1 row in set, 1 warning (0.00 sec) ERROR: No query specified mysql> mysql> begin ; # Step3 HUMPHREY | WILLIS | 2006-02-15 04:34:33 | +----------+------------+-----------+---------------------+ 3

    48730发布于 2021-08-17
  • 来自专栏landv

    金蝶k3wise 核算项目、辅助资料

    金蝶k3wise 核算项目、辅助资料 ----核算项目信息 select * from t_ItemClass ----核算项目字段信息 select * from t_ItemPropDesc where * from t_Department --FItemClassID = 2 select * from t_Emp --FItemClassID = 3 cbCostObj --FItemClassID = 2011 select * from t_WorkCenter --FItemClassID = 14 ---辅助资料

    54420发布于 2018-08-02
  • 来自专栏GreatSQL出品技术文章

    3.联合索引、覆盖索引及最左匹配原则|MySQL索引学习

    索引被使用的前提下,tcol02的索引才会被使用。 `t3` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tcol01` tinyint(4) DEFAULT NULL, `tcol02` smallint 情况3:下面的SQL用不到索引 [root@GreatSQL][test]>explain SELECT /* NO_CACHE */ * FROM t1 WHERE tcol02=167; +---- 那么就可以使用到覆盖索引的功能,查询数据无需回表,减少随机IO。 3.效率高。多列条件的查询下,索引列越多,通过索引筛选出的数据就越少。 3.尽量避免>、<、between、or、like首字母为%的范围查找,范围查询可能导致无法使用索引。 4.只筛选需要的数据字段,满足覆盖索引的要求,不要用 select * 筛选所有列数据。

    1.9K10编辑于 2022-04-18
  • 来自专栏源码之路

    「Mysql索引原理(十四)」索引案例3-优化排序

    对于那些选择性非常低的列,可以增加一些特殊的索引来做排序。 例如,可以创建(sex,rating)索引用于下面的查询: mysql> SELECT <cols> FROM profiles WHERE sex=‘M’ ORDER BY rating LIMIT 10; 这个査询同时使用了ORDER BY和LIMIT,如果没有索引的话会很慢。 即使有索引,如果用户界面上需要翻页,并且翻页翻到比较靠后时査询也可能非常慢。 优化这类索引的另一个比较好的策略是使用延迟关联,通过使用覆盖索引查询返回需要的主键,再根据这些主键关联原表获得需要的行。这可以减少 MySQL扫描那些需要丢弃的行数。

    76130发布于 2020-09-04
  • 来自专栏java学习java

    索引的数据结构(3

    3. 叶子节点包括 k-1 个关键字(叶子节点没有孩子),k 的取值范围为 [ceil(M/2), M]。 4. 上面那张图所表示的 B 树就是一棵 3 阶的 B 树。 我们可以看下磁盘块 2,里面的关键字为(8,12),它 有 3 个孩子 (3,5),(9,10) 和 (13,15),你能看到 (3,5) 小于 8,(9,10) 在 8 和 12 之间,而 (13,15 按照指针 P1 找到磁盘块 2,关键字为(8,12),因为 9 在 8 和 12 之间,所以我们得到指针 P2; 3. 3. 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而 B 树中, 非 叶子节点既保存索引,也保存数据记录 。 4.

    51930编辑于 2022-11-15
  • 来自专栏用户9688532的专栏

    3D软件轧制螺旋叶片的辅助作用

    前者要比后者复杂的多,且必须次用3D模拟。随着今年来有限元模拟技术的发展对于等界面轧制的整个模拟过程已经得到了比较满意的解决。 DEFORM3D_v10.2_MO3_lab文档下载比如ANSYS/DEFORM等都能对板材和型钢轧制进行方便和较为准确的模拟计算,求得轧辊和轧件在变形过程的所有力能参数以用来指导实践。 但对于本课题所研究的异面轧制,他是属于一种特种轧制,金属的不均匀变形成都十分剧烈,要想利用通过用软件对它进的直接的模拟就需要求软件具有十分强大的网格重划功能,上述的软件目前不能直接满足这种情况的要求,其中DEFORM3D

    51040编辑于 2022-06-30
  • 来自专栏vivo互联网技术

    【干货】Elasticsearch的索引性能优化(3

    创建索引的API允许实例化一个索引。Elasticsearch能够为多个索引,包括跨索引的操作提供支持。每个创建的索引都有与其关联的单独配置。 localhost:9200/my_index -d '{ "settings" : { "index" : { "number_of_shards" : 3, 索引别名API允许为一个索引起一个别名,并且所有的API会自动将别名转换为对应的索引。一个别名也可以同时映射到多个索引,当指定别名时,它会自动扩展到所有的对应的索引3 启用专门的数据节点 数据节点包含了建立索引的文档所在的分片。数据节点处理与数据相关的操作比如GRUD、搜索、聚合。这些操作属于I/O、内存和CPU密集型。 英文原文:https://qbox.io/blog/maximize-guide-elasticsearch-indexing-performance-part-3

    81120发布于 2019-04-19
  • 来自专栏vivo互联网技术

    【干货】Elasticsearch的索引性能优化(3

    创建索引的API允许实例化一个索引。Elasticsearch能够为多个索引,包括跨索引的操作提供支持。每个创建的索引都有与其关联的单独配置。 localhost:9200/my_index -d '{ "settings" : { "index" : { "number_of_shards" : 3, 索引别名API允许为一个索引起一个别名,并且所有的API会自动将别名转换为对应的索引。一个别名也可以同时映射到多个索引,当指定别名时,它会自动扩展到所有的对应的索引3 启用专门的数据节点 数据节点包含了建立索引的文档所在的分片。数据节点处理与数据相关的操作比如GRUD、搜索、聚合。这些操作属于I/O、内存和CPU密集型。 英文原文:https://qbox.io/blog/maximize-guide-elasticsearch-indexing-performance-part-3 ---- 本文章未经授权,禁止转载,

    1.3K30发布于 2019-03-19
  • 来自专栏学习有记

    聚集索引:SQL Server 进阶 Level 3

    108 733 3 356.90 43668 109 763 3 Scan count 1, logical reads 3. Scan count 1, logical reads 3. 表3:检索单个产品的所有行 前两个查询大大受益于聚簇索引的存在; 第三个是大致相等的。 有时聚集索引是有害的吗? 答案是肯定的,主要与插入,更新和删除行有关。 在我们的四级中,我们将重点从逻辑转向物理,介绍页面和范围,并检查索引的物理结构。 可下载的代码 Clustered.SQL 资源: Level3_Clustered.sql ----

    1.4K30发布于 2018-07-19
  • 来自专栏全栈程序员必看

    mapstate辅助函数(辅助函数是什么)

    为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键:  mapState是什么?    为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键   在使用mapState之前,要导入这个辅助函数. import { mapState } from ‘ ,还想使用mapState辅助函数的方便,你可以需要做下列事情. //之前的computed computed:{     fn1(){ return …},     fn2(){ return …},     fn3(){ return …}     首先,来回顾一下…对象展开符在数组中的表现,这在ES6语法学习分类里有相关说明,如果有兴趣可以关注我的ES6分类中的文章. let arr = [1,2,3] console.log(…arr) //

    91010编辑于 2022-07-29
  • 来自专栏landv

    -辅助函数

    辅助函数 顾名思义,帮助程序可以帮助您完成任务。每个帮助文件只是特定类别中功能的集合。 与CodeIgniter中的大多数其他系统不同,辅助程序不是以面向对象的格式编写的。它们是简单的程序功能。每个助手功能执行一项特定任务,而不依赖于其他功能。

    2.4K20发布于 2020-03-05
  • 来自专栏前端开发

    如何在Vue3中使用mapGetters辅助函数?

    在 Vue3 的组合式 API 中,Vuex 同样没有内置适用于 <script setup> 的 mapGetters 辅助函数,但我们可以参考 mapState 的实现思路,封装一个适用于组合式 API ['count']) const { doubleCount } = mapGetters(['doubleCount'])总结通过封装自定义的 mapGetters 工具函数,我们可以在 Vue3

    42610编辑于 2025-08-22
  • 来自专栏MySQL进阶

    MySQL的3索引合并优化⭐️or到底能不能用索引?

    MySQL导致索引失效的八股文中有这样一条:使用or会导致索引失效那么是不是所有场景都会失效呢? 比如有两个集合分别是(1,2,3)、(2,3,4),那么交集就是它们都存在的值(2,3)举例这样一条SQL:select * from seat where seat_code = 'caicaiseat ' and student_id = 1当不使用索引合并优化时,优化器可能选择seat_code索引或者student_id索引当使用seat_code索引时,先在索引中找到满足seat_code = ,因此大部分使用交集索引合并的场景是等值比较=开启交集索引合并,查看执行计划type类型为索引合并,使用到这两个索引,附加信息显示用到交集索引合并,并且还用上覆盖索引不需要回表由于seat座位表只存在主键 比如有两个集合分别是(1,2,3)、(2,3,4),那么并集就是它们都存在值的总和(1,2,3,4)举例这样一条SQLselect * from seat where seat_code = 'caicaiseat

    1.1K22编辑于 2024-06-18
领券