首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

1w字MySQL索引面试题(附md文档)

如果没有显式指定,则MySQL系统会自动选择一个可以非空且唯一标识数据记录的列作为主键。...由于数据的物理存储排序方式只能有一种,所以每个MySQL的表只能有一个聚簇索引。 如果没有为表定义主键,InnoDB会选择非空的唯一索引列代替。...一张表可以有多个非聚簇索引: 6、说一下B+树中聚簇索引的查找(匹配)逻辑 7、说一下B+树中非聚簇索引的查找(匹配)逻辑 例如: 根据c2列的值查找c2=4的记录,查找过程如下: 根据根页面44定位到页...聚簇索引数据和索引存放在一起组成一个b+树 参考第5题 19、一个表中可以有多个(非)聚簇索引吗? 聚簇索引只能有一个 非聚簇索引可以有多个 20、聚簇索引与非聚集索引的特点是什么?...参考005题 21、CRUD时聚簇索引与非聚簇索引的区别是什么?

33520

Mysql索引:图文并茂,深入探究索引的原理和使用

mysql索引系统采用的数据结构是什么? 为什么要使用B+树? 聚集索引相对于非聚集索引的区别? 什么是回表? 什么是索引覆盖? 什么是最左匹配原则? 索引失效场景有哪些,如何避免?...如果表中没有定义主键,那么该表的第一个唯一非空索引被作为聚集索引。...(a值确定时,b是有序的,因此可以使用联合索引) SELECT * FROM table WHERE a=1 AND b>3; 3、精确匹配最左列并范围匹配非右一列(a值确定时,c排序依赖b,因此无法使用联合索引...多字段索引,违反最佳左前缀原则。例如,student表如果建立了(name,addr,age)这样的索引,WHERE后的第一个查询条件一定要是name,索引才会生效。...要想使用OR,又想让索引生效,只能将OR条件中的每个列都加上索引。

95610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    150道MySQL高频面试题,学完吊打面试官--聚簇索引与非聚簇索引

    主键默认:如果没有显式地指定聚簇索引,MySQL会自动使用主键(Primary Key)作为聚簇索引。如果表中没有主键,MySQL会选择第一个唯一非空索引作为聚簇索引。...由于数据的物理存储排序方式只能有一种,所以每个MySQL的表只能有一个聚簇索引。 如果没有为表定义主键,InnoDB会选择非空的唯一索引列代替。...多列索引:可以在一个表中创建多个非聚簇索引,这些索引可以是单列或多列的。 性能:因为非聚簇索引需要额外的指针查找数据行,所以查询性能通常比聚簇索引慢。...数量: 每个表只能有一个聚簇索引。 每个表可以有多个非聚簇索引。 B+树中聚簇索引的查找(匹配)逻辑 查找逻辑 从根节点开始遍历:当需要查找某个主键值时,查询操作从B+树的根节点开始。...在每一层中,都重复进行关键字的比较和遍历方向的确定,直至到达叶子节点。 在叶子节点中查找匹配项: 当查询操作到达叶子节点时,叶子节点中存储的是数据的地址或主键值。

    6110

    解读 Optimizing Queries Using Materialized Views:A Practical, Scalable Solution

    P_{q,j}为判断 为真,将选择谓词分别表示为CNF格式, 和 ,一种简单包含算法是检查 中每个合取项 是否与 中的某个合取项 匹配。...判断合取项是否匹配有多种方法,例如纯粹的语法匹配,判断查询与视图的SQL字符串是否一致,该方法限制严苛,例如 和 两个谓词条件是字符串语法不匹配的。...校验视图每个范围是否包含对应的查询范围,如果不是,则拒绝该视图 检查视图剩余谓词中的每个合取项是否与查询剩余谓词中的某个合取项匹配。...考虑查询的谓词为 ,如果 没有声明为非空的,则会判断拒绝该视图。但由于查询中已限定 ,因此 为空的行都会忽略,在该场景下判断视图必须声明 必须非空具有局限性。 3.3....Hub条件 基于3.2节的视图额外表消除,将剩余集合称为视图核心(hub),并忽略非查询源表子集的视图。以视图核心(hub)作为键构建格索引,以查询源表集合作为搜索键,查找搜索键的子集。

    15742

    【Mysql进阶-2】图文并茂说尽Mysql索引

    因为聚集索引的特性,它的建立有一定的特殊要求: 在Innodb中,聚簇索引默认就是主键索引。 如果表中没有定义主键,那么该表的第一个唯一非空索引被作为聚集索引。...(a值确定时,b是有序的,因此可以使用联合索引) SELECT * FROM table WHERE a=1 AND b>3; 3、精确匹配最左列并范围匹配非右一列(a值确定时,c排序依赖b,因此无法使用联合索引...全文索引允许在索引列中插入重复值和空值。 索引在实际使用上分为单列索引和多列索引。 单列索引:单列索引就是索引只包含原表的一个列。在表中的单个字段上创建索引,单列索引只根据该字段进行索引。...多字段索引,违反最佳左前缀原则。例如,student表如果建立了(name,addr,age)这样的索引,WHERE后的第一个查询条件一定要是name,索引才会生效。...要想使用OR,又想让索引生效,只能将OR条件中的每个列都加上索引。

    1.1K20

    mysql数据库面试题目及答案_java面试数据库常见问题

    分布式全局唯一ID—UUID、GUID等 聚集索引与非聚集索引的区别 非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据...如果不是按照索引的最左列开始查找,则无法使用索引。...= 或 not in或 等否定操作符 尽量避免使用 or 来连接条件 多个单列索引并不是最佳选择,复合索引的最左前缀原则 查询中的某个列有范围查询,则其右边所有列都无法使用索引优化查找。...非空字段:应该指定列为NOT NULL,除非你想存储NULL。在mysql中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。...{按聚集分类:聚集索引和非聚集索引} 索引( 普通索引):不允许有空值,指字段 唯一、不为空值 的列 唯一索引:唯一索引可以保证数据记录的唯一性,在为这个数据列创建索引的时候就应该用关键字UNIQUE

    92030

    趣味算法:JS实现红绳算法(匹配合适的另一半)

    也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。...(2)查找元素:查找元素时,首先散列值所指向的槽,如果没有找到匹配,则继续从该槽向后遍历哈希表,直到:1)找到相应的元素;2)找到一个空槽(指示查找的元素不存在);3)整个哈希表都遍历完毕(指示该元素不存在并且哈希表已满...一般可以设立一个溢出表,用来存放上述哈希表中放不下的记录。此溢出表最简单的结构是顺序表,查找方法可用顺序查找; (2)删除工作很复杂。...因为一旦对某一个元素删除后,该位置出现空槽,后续查找到该空槽时会认为该元素不存在。...目前我们的hashTable数据长这样 每个hash即数组下标对应一个链表(如果有)/undefined(如果没有) 中奖规则设计 今天是七夕,于是我取出每个hash对应链表的第7个位置人出来匹配

    70720

    深入理解MySQL索引

    3、索引什么时候会失效,最左匹配原则是什么? 当遇到这些问题的时候,可能会发现自己对索引还是一知半解,今天我们一起学习MySQL的索引。...非聚集索引 索引的逻辑顺序与磁盘上行的物理存储顺序不同,非聚集索引在叶子节点存储的是主键和索引列,当我们使用非聚集索引查询数据时,需要拿到叶子上的主键再去表中查到想要查找的数据。...这个过程就是我们所说的回表。 3)聚集索引和非聚集索引的区别 聚集索引在叶子节点存储的是表中的数据。 非聚集索引在叶子节点存储的是主键和索引列。...4.2 联合索引失效问题 该部分参考并引用文章: 一张图搞懂MySQL的索引失效 创建user表,然后建立 name, age, pos, phone 四个字段的联合索引 全值匹配(索引最佳)。 ?...索引生效,这是最佳的查询。 那么时候会失效呢? 1)违反最左匹配原则 最左匹配原则:最左优先,以最左边的为起点任何连续的索引都能匹配上,如不连续,则匹配不上。

    77721

    MySQL 索引及查询优化总结

    对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找。...真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。...这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。 (2) 索引的最左匹配特性。...所以,应该养成一个需要什么就取什么的好习惯。 3、order by 语句优化 任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。...方法:1.重写order by语句以使用索引; 2.为所使用的列建立另外一个索引 3.绝对避免在order by子句中使用表达式。

    29.1K105

    MySQL索引 Krains 2020-08-09

    # B+Tree MySQL的基本存储结构是页,记录都存在页里面,下图以聚簇索引为例,页与页之间构成一个双向链表,每个页中的记录又组成一个单向链表,页里边将记录分组,将每组第一个记录的主键提取出来构成一个目录项...,目录项是一个数组,叶子结点记录了实际的记录,而非叶子结点并不记录实际记录,只是记录了其孩子结点第一个记录的主键以及所在页号。...16kb 高度为2时:对于非叶子结点来说,没有存数据,只存了主键,一个页能存16384/(4+6)个行数据,也就是能指向1638个页,对于叶子结点来说,每个页能够存储16/1=16行数据,那么16*1638...(记录之间用单链表,数据页之间用双链表),只需要遍历链表就能够取出记录 找到这些记录的主键值,再到聚簇索引中回表查找完整的记录 在联合索引中使用范围查询的时候时,如果对多个列同时进行范围查找的话,只有对索引最左边的那个列进行范围查询的时候才能用到...创建索引时的技巧 根据最左匹配原则,建立索引的时候尽量将使用查询次数最多的项放到最前面。 索引列的类型尽量小,占用空间少,一个就可以多放几条记录,甚至可以降低B+Tree的高度,使得查找的效率变高

    39610

    关于Mysql数据库索引你需要知道的内容

    数据库索引是什么 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。...在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。...% aa 这样的查询条件 5.最佳左前缀法则(带头索引不能死,中间索引不能断) 如果索引了多个列,要遵守最佳左前缀法则。...分析最佳左前缀原理 先举一个遵循最佳左前缀法则的例子 select * from testTable where a=1 and b=2 分析如下: 首先a字段在B+树上是有序的,所以我们可以通过二分查找法来定位到...以此类推 开始分析 一、%号放右边(前缀) 由于B+树的索引顺序,是按照首字母的大小进行排序,前缀匹配又是匹配首字母。所以可以在B+树上进行有序的查找,查找首字母符合要求的数据。

    1.4K30

    和面试官聊了半小时的MySQL索引!

    下面是本文的核心内容: 常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略 1.常见索引类型(实现层面) 首先不谈Mysql怎么实现索引的,先马后炮一下...特点跟单列索引一样,不同之处在于他的排序,如果第一个字段相同时会按第二个索引字段排序 如何通过B-tree快速查找数据?...InnoDb 将通过主键来实现聚簇索引 ,如果没有主键则会选选一个唯一非空索引来实现。如果没有唯一非空索引则会隐式生成一个主键。...结论 聚簇索引: 通常由主键或者非空唯一索引实现的,叶子节点存储了一整行数据 非聚簇索引: 又称二级索引,就是我们常用的普通索引,叶子节点存了索引值和主键值,再根据主键从聚簇索引查查找数据。...'%XYZ'这种查询,都不知道前缀是什么如何查找,那就全表扫描呗。

    58120

    Mysql索引一篇就够了

    定义 索引是对数据库表中一列或者多列的值进行排序的结构。 目的 数据库索引好比一本书的目录,提高查询效率。...但是为表设置索引要付出相应的代价: 增加了数据库的存储空间 在插入和修改时需花费更多的时间(因为索引也要随之变动) 分类 1. 聚集索引 索引项的顺序与表中记录的物理顺序一致。...这种索引叫做聚集索引(密集索引)(索引和数据保存在同一文件中): 若一个主键被定义,该主键作为聚集索引; 若没有主键定义,该表的第一个唯一非空索引作为聚集索引; 若均不满足,则会生成一个隐藏的主键( MySQL...建索引的原则 最左前缀匹配原则 MySQL 会一直向右匹配知道遇到范围查询(>、匹配。...索引失效 最左前缀匹配原则,遇到范围查询 like 模糊查询,第一个位置使用 '%' 没有查询条件 表比较小时,全表扫描速度比索引速度快时,索引失效 (由于索引扫描后要利用索引中的指针去逐一访问记录,

    26730

    B-Tree和B+Tree的比较

    B-Tree索引能够处理全值匹配和范围查询,并且能够按照索引列的顺序进行排序。 B+Tree是一种自平衡的树结构,它维护了排序数据的索引。...唯一索引: 确保索引列中的所有值都是唯一的。 可以在一个或多个列上创建唯一索引。 主键索引是一种特殊的唯一索引,它不仅要求值是唯一的,还要求每个值都不能为NULL。...如果找到匹配项,则返回该匹配项及其对应的数据记录(或指向数据记录的指针)。如果没有找到匹配项,但叶子节点中存在相邻的节点指针,并且搜索是范围查询的一部分,则可以使用这些指针继续搜索。...5.处理范围查询:如果搜索是范围查询(例如,查找所有大于某个值的数据项),则在找到第一个匹配项后,可以沿着叶子节点间的链表继续搜索,直到找到范围外的第一个数据项为止。...每次查找都需要到达叶子节点,但由于内部节点不存储数据,每个节点可以存储更多的关键字,从而树的高度相对较低,减少了查找所需的磁盘I/O次数。

    14310

    MySQL索引的原理,B+树、聚集索引和二级索引的结构分析

    在mysql中,存储引擎用类似的方法使用索引,先在索引中找到对应值,然后根据匹配的索引记录找到对应的行。 B树索引 大多数存储引擎都支持B树索引。...匹配最左前缀 查找姓为Allen的人,即只用索引的第一列。 匹配列前缀 匹配某一列的值的开头部分,例如查找所有以J开头的姓的人。 匹配范围值 查找姓在Allen和Barrymore之间的人。...但是哈希索引也有它的限制: 哈希索引不是按照索引顺序存储的,无法用于排序。 不支持部分索引列匹配查找。 不支持范围查找。 聚集索引 每个存储引擎为InnoDB的表都有一个特殊的索引,叫聚集索引。...二级索引可以有0个,1个或者多个。二级索引和聚集索引的区别是什么呢?二级索引的节点页和聚集索引一样,只存被索引列的值,而二级索引的叶子页除了索引列值,还存这一列对应的主键值。...更新聚集索引列的代较很高,会强制InnoDB将每个被更新的行移动到新的位置。 用二级索引访问数据需要两个索引查找,不是一次。

    3.1K30

    MySQL入门必须知道的知识点!

    三.MySQL的索引结构是什么样的?聚簇索引和非聚簇索引又是什么?...AVL树:树种任意节点的两个子树的高度差最大为1 红黑树:1.每个节点都是红色或者黑色。2.根节点是黑色。3.每个叶子节点都是黑色的空节点。4.红色节点的父子节点都必须是褐色。...InnoDB中,如果表定义了主键,那主键就是聚簇索引,如果没有主键,就会找第一个非空的unique列作为聚簇索引。否则,InnoDB会创建 一个隐藏的row-id作为聚簇索引。...; eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条数据与之匹配; ref:非唯一性索引扫描,返回匹配某个值的所有; range:只检查给定范围的行,使用一个索引来选择行...) 不损失精确性的情况下,长度越短越好 8、ref:列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 9、rows:估算出结果集行数,表示MySQL根据表统计信息及索引选用情况

    55800

    一文搞懂MySQL索引所有知识点(建议收藏)

    大家好,又见面了,我是你们的朋友全栈君。 Mysql索引 索引介绍 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。...索引类型 主键索引 索引列中的值必须是唯一的,不允许有空值。 普通索引 MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。...唯一索引 索引列中的值必须是唯一的,但是允许为空值。 全文索引 只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。...其他(按照索引列数量分类) 单列索引 组合索引 组合索引的使用,需要遵循最左前缀匹配原则(最左匹配原则)。一般情况下在条件允许的情况下使用组合索引替代多个单列索引使用。...查找到值等于30的索引项。(1次磁盘IO) 从索引项中获取磁盘地址,然后到数据文件user.MYD中获取对应整行记录。(1次磁盘IO) 将记录返给客户端。

    66610
    领券