复习下面试知识

首先索引的分类:

 1.从功能逻辑上来说,索引主要可以分为以下几种:

   普通索引:最基本的索引类型,没有任何限制,值可以为空,主要用于加速查询。

   唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一

   主键索引:一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。主键索引在创建时通常与表的创建同时进行。

   全文索引:主要用于查找文本中的关键字,与直接比较索引中的值不同,全文索引更像是一个搜索引擎,可以高效地处理大量文本数据。

2.按照物理实现方式,索引可以分为:
  1. 聚簇索引:数据行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚簇索引,因为数据行的物理顺序只能有一种。
  2. 非聚簇索引:数据行的物理顺序与键值的逻辑(索引)顺序不同。非聚簇索引与数据分开存储,并且指向数据的逻辑指针存储在索引中。一个表可以有多个非聚簇索引。
3.按照作用字段个数进行划分,索引可以分为:
  1. 单列索引:基于单个列创建的索引。
  2. 组合索引(多列索引):基于多个列创建的索引。组合索引在查询条件中使用了创建索引时的第一个字段时,索引才会被使用,使用组合索引时需要遵循最左前缀原则。

根据数据库的不同,可能还存在其他特定类型的索引,如空间索引、位图索引等。这些索引类型通常用于满足特定的查询需求或优化特定的数据操作


mysql索引:        

       1.索引以数据页为最小存储单元,一个数据页为16KB

       2.一张表中默认是主键是自增索引

       3.叶子节点是通过双向链表来绑定的

索引的数据结构:

        一般用的是b+树索引,当然也有哈希索引,不过哈希索引用的少, 哈希结构是key,value结构,为什么哈希用的少呢,因为哈希不太能支持范围查询,排序查询这些!

        b+树结构  的特点 矮胖

        数据全部挂在叶子节点,并且用双向链表来链接,非叶子节点不存储具体的数据!

         

怎么走索引。

 select  name,age from  ** where name="**"

索引覆盖:

    查询的字段都走索引,就叫做索引覆盖

    select  name,age,address  from  ** where name="**"

回表的概念:

        假如name,age,id有索引,address没有索引, 在查询address时会先走索引查询出来数据,然后根据id走主键索引,再查出数据,查出来address,就是回表。

最左匹配原则: 索引为 name  age

        select  name,age,address  from  xx where name = xx,age=xx;

        select  name,age,address  from  xx where age= xx,name =xx;

        在设计索引和使用查询时,应该尽量保证查询条件与索引列的顺序相匹配,以充分利用索引的优势,提高查询性能!

        

        

     

索引下推:  尽量能用索引就用索引

        假设我们有一个名为users的表,其中有两个字段:idemail,并且我们在email字段上建立了一个索引。现在,我们想要查询所有邮箱以@example.com结尾的用户,并且这些用户的id字段大于100。

        SELECT * FROM users WHERE email LIKE '%@example.com' AND id > 100;

使用索引下推的情况下,MySQL服务器会将过滤条件id > 100下推到存储引擎层。存储引擎在遍历email字段的索引树时,会同时应用email LIKE '%@example.com'id > 100这两个条件来过滤数据。这样,只有同时满足这两个条件的数据块才会被返回给MySQL服务器

mysql的锁有行锁和表锁:

        表锁:

        行锁:innoDb特有:索引行锁,锁的是索引

redis为什么快:        

        单线程,减少上下文切换 (上下文切换:一个cpu同时只能执行一个A线程的任务,过一会又去执行B线程的任务,不同的线程都要去抢占CPU的资源  时间片)

        IO多路复用:  正常每个客户端和服务端连接,每个连接都需要一个线程

                                因为线程消耗资源,而且不是每个连接时刻都有数据,

                                io多路复用让一个线程监控多个socket连接

        基于内存: 内存离cpu最近

       过期删除: 随机抽查删除+惰性删除

       内存淘汰: lRU算法  最近最少使用

redis 数据备份 

        RDB: 全量备份 

        AOF:增量备份

 aof文件太大了,aof重写,+ -合并为一个命令!

 redis主从怎么同步,先同步rdb文件,再同步aof文件

分布式锁: 分布式环境下,保证同一时间只有一个节点的一个线程能操作共享资源变量。

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值