mysql面试题

一.有哪些存储引擎,有哪些区别

    一般常用的存储引擎有InnoDB和MyISAM,区别如下:

         1. InnoDB支持索引,MyISAM不支持。

         2.InnoDB支持外键,MyISAM不支持,有外键的InnoDB转成MyISAM会报错。

         3.InnoDB是聚集索引,采用B+Tree作为索引结构,数据文件是和索引绑定在一起的,必须要有主键,通过主键索引查询的效率会很高,但是辅助索引需要二次查询,先要查询到主键,然后在通过主键查询数据,因此主键不宜过大,因为主键过大,其他索引也会很大,MyISAM是非聚集索引,索引和数据文件是分离的,索引保存的是数据文件的指针,主键缩影和辅助索引是独立的,

        4.InnoDB不保存表的具体函数,因此使用select count(*) from table 时会存在全表扫描,而MyISAM使用了一个变量保存全表的行数,读取全表行数的时候直接读取这个变量,因此速度很快(注意:不能加有任何where条件)

        5.InnoDB支持行锁,表锁,MyISAM只支持表锁(InnoDB行锁是实现在索引上,而不是在物理行记录上,因此如果访问没有命中索引,则无法使用行锁,退化成表锁)

       6.InnoDB一定要有主键,如果用户没有设置主键的话会自己找或者生产一个主键,MyISAM可以没有。

        7.InnoDB存储文件有frm(表定义文件),ibd(数据文件) , MyISAM存储文件有frm(表定义文件),myd(数据文件),myi(索引文件)

二.事务

  关系型数据库应该遵循ACID原则,具体如下:

       1.原子性:事务是最小的执行单位,不允许分割,事物的原子性确保动作要么全部完成,要么完全不起作用

       2.一致性: 事务执行前后,数据保持一致

       3.隔离性: 并发访问数据库时,一个用户的事务不被其他事务干扰,各并发事务之间数据库是独立的

       4.持久性: 一个事务提交后,他对数据库改变是持久的,即使数据库发生故障也不会有任何影响

  为了达到以上事物特性,数据库定义了几种不同的隔离级别:

      1.read_uncommited (未提交读) :允许读取未提交的数据变更(会导致脏读,幻读,不可重复读)

      2.read_commited(提交读): 允许读取并发事务已经提交的数据(可以阻止脏读,但是幻读和不可重复读仍有可能发生)

     3.repeatable_read(可重复度): 对同一字段的多次读取结果都是一致的,除非数据被本身事务所修改(可以阻止脏读,不可重复读,但幻读仍可能发生)

      4.serializble(串行化):最高的隔离级别,完全遵从ACID原则。所有的事务依次逐个执行,这样事务完成不产生干扰 ,完成的解决了脏读,幻读,不可重复读,但是将严重影响系统性能,一般不会用到该级别

三.锁

   行级锁和表级锁的区别:

           表级锁:Mysql中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也少,加锁快,不会出现死锁,其锁定粒度最大,触发锁冲突的概率最大,并发率最低,MyISAM和InnoDB都支持表锁

           行级锁:Mysql中锁定粒度最小的一种锁,只针对当前的操作行加锁,行级锁能大大减少数据库操作的冲突,锁粒度最小,并发率最大,但加锁的开销也最大,加锁慢,容易出现死锁

四.大表优化

      

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值