后端面试2

78 阅读3分钟

1谈谈你对数据库中索引的理解 作用是加速查询 底层是通过B+树实现的 索引又分为聚簇索引和非聚簇索引,区别是索引和数据是否储存在一起 拿InnoDB主键索引举个例子,这是一个聚簇索引,在非叶子节点中存放数据为主键数据,以及其指向的页的页号(数据库底层是以页为基本储存单位),在叶子节点存放完整的数据 而如果我们拿一张表的另一个或多个字段创建索引,那个就会形成一个非聚簇索引,其非叶子节点和聚簇索引的结构类似,但是其叶子节点并不会存放完整的数据,而是存放对应数据的主键。 在具体的查询过程中,如果采用聚簇索引,则会直接通过B+树找到完整的数据并返回,但是如果使用非聚簇索引,则会先找到具体数据的主键的值,再用该主键的值去到主键索引中找到完整的数据。当然,如果是索引覆盖的情况(即查找的字段被创建索引的字段所包含)那么将不会进行回表操作,直接返回值。 我们在使用索引时应该要避免索引失效,遵循最左匹配原则,即我们使用的where关键字时,后面的条件的顺序要和当初创建索引时的顺序相匹配,并且只能是前几个连续的。索引失效将会导致全表扫描,大大降低数据查询效率。 索引的使用并不是由我们决定的,而是由查询优化器通过预估计算后选出最合适的索引进行查询

2索引的优点和缺点 索引的优点 1.创建唯一性索引,保证数据库表中每一行数据的唯一性 2.大大加快数据的检索速度,这也是创建索引的最主要的原因 3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。 索引的缺点 1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加 2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大 3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度
3session、cookie和cache的区别是什么 Cookie存储在客户端,安全性不高,存储数据量少,无过期时间;Session保存在服务端,安全性高,存储数据量根据服务器的来决定,有过期时间。Cache是缓存数据的一种方式,主要是提高访问速度。 4.如果有几千个session,怎么提高效率? 做持久化,把不同的Session分布到不同的机器上,通过负载均衡实现会话在多个服务器共享。同时,设置session失效策略减少无用的Session信息。 5.session是存储在什么地方,以什么形式存储的? 存储在服务器端,有基于内存存储和数据库或者文件持久化存储,通过键值对的形式存储