数据面试题

1.内连接:

内连接也叫自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取两个表中所匹配的数据,舍弃不匹配的数据

2.外连接:
内连接保证两个表中的所有行都满足条件,而外连接则不然,外连接不仅仅包含符合连接条件的行,而且还包括左表(左外连接),右表(右外连接),或者两个边表(全外连接)中的所有数据行。内连接只显示符合连接条件的记录,外连接除了显示符合连接条件的记录外,还显示表中其他的记录。

3.最左前缀原则
就是最左边优先,就类似于通关类游戏,过了第一关,才能过第二关,过了第一关和第二关,才能过第三关,

建立索引a,b,c下列查询a b , a c ,b c谁会走这个索引及原因?

根据最左前缀原则 只有ab会走这个索引

4.事务:逻辑上得一组操作,这些操作要么全部成功,要么全部失败

5.事务的四大特性:

  • 原子性:即事务是一个不可分割的整体,数据修改时要么都操作一遍要么都不操作

  • 一致性:一个事务执行前后数据库的数据必须保持一致性状态

  • 隔离性:当两个或者以上的事务并发执行时,为了保证数据的安全性,将一个事务的内部的操作与事务操作隔离起来不被其他事务看到

  • 持久性:更改是永远存在的

6.事务得隔离级别:

读未提交:事务中的修改,即使没有提交,其他事务也可以看得到,脏读。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。一个在写事务另一个虽然不能写但是能读到还没有提交的数据

读已提交:可以避免脏读但是可能出现不可重复读。允许写事务,读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。事务T1读取数据,T2紧接着更新数据并提交数据,事务T1再次读取数据的时候,和第一次读的不一样。即虚读

可重复读:禁止写事务,读事务会禁止所有的写事务,但是允许读事务,避免了不可重复读和脏读,但是会出现幻读,即第二次查询数据时会包含第一次查询中未出现的数据

序列化:禁止任何事务,一个一个进行;提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到

7.MyISAM和innoDB:

count 运算上的区别 : 因为MyISAM缓存有表meta-data (行数等) , 因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的。对于innodb是没有这种缓存

MyISAM强调的是性能,每次查询具有原子性,其执行速度比innodb类型更快,但是不提供事务支持。innodb提供事务支持事务,外部建等高级功能MyISAM不支持,而innodb支持

总的来说MyISAM更适合读密集的表,而Innodb更适合写密集的表,在数据库主从分离的情况下,经常选择MyISAM做主库存储引擎。

8.索引:

优点: 可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序

缺点: 索引本身也是表会占用内存,索引表占用的空间是数据表的1.5倍;索引表的创建和维护需要时间成本,这个成本随着数据量的增大而增大

9.索引的底层实现原理:
哈希索引:
只有memory(内存)存储引擎支持哈希索引,哈希索引用索引列的值计算该值的hashCode,然后在hashCode相应的位置存执该值所在行数据的物理位置,因为使用散列算法,因此访问速度非常快,但是一个值只能对应一个hashCode,而且是散列的分布方式,因此哈希索引不支持范围查找和排序的功能

Btree索引:
B树是一个平衡多叉树,设树的度为2d,高度为h,那么B树需要满足每个叶子节点的高度都一样等于h,每个非叶子节点由n-1个key和n个point组成,d< = n<=2d 。所有叶子节点指针均为空,非叶子结点的key都是[key,data]二元组,其中key表示作为索引的键,data为键值所在行的数据

B+Tree索引:

B+Tree是BTree的一个变种,设d为树的度数,h为树的高度,B+Tree和BTree的不同主要在于:

B+Tree中的非叶子结点不存储数据,只存储键值;
B+Tree的叶子结点没有指针,所有键值都会出现在叶子结点上,且key存储的键值对应data数据的物理地址;B+Tree的每个非叶子节点由n个键值key和n个指针point组成;

优点:查询速度更加稳定,磁盘的读写代价更低

聚簇索引与非聚簇索引

聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序

非聚簇索引的解释是:索引顺序与数据物理排列顺序无关

MyISAM——非聚簇索引
MyISAM存储引擎采用的是非聚簇索引,非聚簇索引的主索引和辅助索引几乎是一样的,只是主索引不允许重复,不允许空值,他们的叶子结点的key都存储指向键值对应的数据的物理地址。
非聚簇索引的数据表和索引表是分开存储的

innoDB——聚簇索引
聚簇索引的主索引的叶子结点存储的是键值对应的数据本身,辅助索引的叶子结点存储的是键值对应的数据的主键键值。因此主键的值长度越小越好,类型越简单越好。
聚簇索引的数据和主键索引存储在一起

联合索引:
利用最左前缀原则

数据锁:
锁是计算机协调多个进程或者纯线程并发访问某一资源的机制

Mysql的锁种类:

Mysql的锁机制比较简单,不同的搜索引擎支持不同的锁机制

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率高,并发度最低

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突概率最低,并发度也最高

页面锁:开销和加锁速度位于表锁和行锁之间,会出现死锁,锁定粒度也位于表锁和行锁之间,并发度一般

Mysql表级锁的锁模式(MyISAM):
Mysql表级锁有两种模式:表共享锁(Table Read Lock)和表独占锁(Table Write Lock

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值