一、mysql的存储结构
mysql基础理论,及undolog和redolog、mvcc等 跳转
Mysql数据存储结构:跳转
二、索引
联合索引面试题-案例:跳转
索引分类,已经每种索引在数据库的存储结构跳转
索引类型:
(1).普通索引:普通索引是最基本的索引,它没有任何限制,允许在定义索引的列中插入重复值和空值
(2).唯一索引:索引的值必须唯一,允许有空值,如果是组合索引,列值得组合必须唯一
(3).主键索引:它是一种特殊的唯一索引,一张表只能有一个主键,不允许有空值,一般是在创建表的时候指定主键,主键默认就是主键索引
(4).组合索引:多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用
(5).全文索引:它更像是一个搜索引擎,用来查找文本中的关键字,而不是直接与索引中的值比较,全文索引需要配合match against操作使用,比如:match(字段名) against(“rabbit”)。 而不是一般的where和like
(6).空间索引:空间索引是对空间数据类型的字段建立的索引,创建空间索引的列,必须被声明为not null
1、主建索引:走的是聚簇索引,存的非叶子节点存的是索引,叶子节点是索引+数据。
2、组合索引:走的是辅助索引,非叶子节点存的是组合索引的所有的数据,叶子节点存的是组合索引+主建索引,
最终都是为了拿到主建索引在回表去聚簇索引里面找。由于辅助索引的存在并不会影响数据在聚集索引中的组织,
因此每张表中可以有多个辅助索引
3、非索引查找:走的是聚簇索引,全表扫描,这个是最慢的。
什么是全文索引,怎么使用跳转
MySQL的全文索引是一种特殊类型的索引,用于在文本数据中进行搜索和排序。全文索引基于单词进行索引,而不是基于行或
列进行索引。它们在全文搜索方面非常高效,可以在大量的文本数据中进行快速搜索和匹配。
MySQL提供了两种全文索引类型:InnoDB和MyISAM。这两种类型都可以创建全文索引,但它们在功能和使用场景上略有不同。
InnoDB全文索引:InnoDB是MySQL的默认存储引擎,它支持全文索引。InnoDB全文索引基于单词进行索引,并将单词存
储在一个称为“倒排索引”的数据结构中。这种结构允许快速查找包含某个单词的文本行。InnoDB全文索引支持布尔模式、
自然模式和正则表达式模式等搜索方式。
MyISAM全文索引:MyISAM是MySQL早期版本中常用的存储引擎,也支持全文索引。MyISAM全文索引同样基于单词进行索引,
但与InnoDB不同,它使用了一个称为“关键词统计”的数据结构来存储单词。关键词统计结构允许快速查找包含某个单词的文
本行,但它不支持正则表达式模式搜索。
使用全文索引时,需要注意以下几点:
全文索引只适用于文本列,不适用于非文本列(如数字、日期等)。
全文索引不支持部分匹配,只能进行完全匹配搜索。
全文索引的创建和维护需要一定的时间和资源,因此在创建全文索引之前,请确保对数据进行适当的优化和调整。
在使用全文索引时,可以通过优化查询语句来提高搜索效率,例如使用LIKE关键字进行模糊匹配时,尽量避免使用%通配符。
总之,MySQL的全文索引是一种强大的工具,用于在文本数据中进行高效搜索和排序。了解不同类型的全文索引以及它
们的适用场景和使用注意事项可以帮助您更好地利用全文索引进行数据管理和查询优化。
组合索引在辅助索引的存储方式,以及排序规则,在查询匹配的时候,也是最左匹配原则。跳转
1、什么是覆盖索引:覆盖索引是指,在select后面只有部分列,而且这些列在辅助索引结构中都包含了,所以就不需要再走回表去聚簇索引里面捞数据。
什么是索引下推 跳转
索引下推:mysql数据分三层,第一层:连接层 第二层 server层,第三层 引擎层
server层主要是用来解析sql,和拿到sql返回的数据,在更具where过滤掉数据,server拿到的数据是索引过滤好了的,因为不是所有where在引擎层都能过滤完的。
那么索引下推是指,当我们用了like模糊查询数据后,没有下推的情况下,是不走like后面的索引,如果有索引下推,就会在拿索引在引擎层,在一次判断。
索引下推小结:
主要就是范围条件下推:MySQL可以在存储引擎中对范围条件进行处理,而不是将所有数
据传输到MySQL服务器层再进行过滤。这可以减少不必要的数据传输,提高查询性能。
const > ref > ref_or_null > range > index > all 的含义
const表示使用精准匹配,并且是主建或者唯一索引进行匹配,ref是普通索引进行匹配,range是指主建或者普通索引的范围匹配。index其实也叫索引覆盖。
跳转
二级索引和非聚簇索引,或者复合索引都是一个东西。就是非主建索引。
如果索引是中文或者字符串,那么在非聚簇索引中,是怎么排序的。是通过设置的字符串,通过设置的字符集找到汉字所对应的编码,然后存储在索引上,注意汉字相对比较占用空间。
三、存储引擎
mysql的存储引擎分类:跳转
三、mysql分库分表
mysql 面试-主要是针对分库分表后一些问题 跳转
分库分表和非分库分表的映射关系 《跳转》
分库分表难点:
1、跨数据库关联查询。
2、分布式事务
3、排序、分页、
4、分库分表键
5、扩容问题
解决方案:
使用分布式数据
sharding-jdbc使用案例跳转
分库分表数据迁移问题:跳转
分库分表一些概念
水平分区和垂直分区跳转
2、分区和分表的区别:分区就是对数据在物理层面的拆分,分表是对数据拆分。分区可以水平分,不能垂直分,分表可以水平分和垂直分。分区主要突破磁盘的读写能力。
跳转
什么是异地多活,说白了就是各个区域都有备份,选某一个区域做主节点,当主节点又数据写入,那么就把主节点的数据同步给其他区域的副节点。
跳转
四、Mysql 集群
1、【分布式数据库】包括以下几种类型,不单单是mysql数据,其他都可以做成分布式。
Elasticsearch数据库:可以存在单个节点或多个节点。
Redis数据库:支持丰富数据类型。
Mongodb数据库:能够更便捷的获取数据。
Mysql分布式集群:高可用性。
2、【分布式数据库框架】比如:
蚂蚁金服Oceanbase、腾讯TDSQL、热璞HotDB、中兴GoldenDB、开源MyCAT、开源Cobar。
1、mysql高级:分库分表、mysql分布式集群、MPP-汇总跳转
主要是为了解决:【高可用性】、【并发】、【并行处理】 问题。
2、msql高可用性-主从复制+读写分离跳转
3、分库分表-事务问题 跳转
sharding-汇总《跳转》
4、MPP
五、分布式事务中间件
seata-大纲 《跳转》
分布式事务中间件seata 《跳转》
seata面试题
什么是分布式数据库跳转