天天看点

面试积累-MySQL-关于索引问题请简述常用的索引有哪些种类?MySQL数据库中索引的工作机制是什么?MySQL中 myisam 与 innodb 的区别?MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现) 的?

请简述常用的索引有哪些种类?

  1. 普通索引: 即针对数据库表创建索引
  2. 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值 必须唯一,但允许有空值
  3. 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的 时候同时创建主键索引
  4. 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。 即将数据库表中的多个字段联合起来作为一个组合索引。

MySQL数据库中索引的工作机制是什么?

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。

索引的实现通常使用 B 树及其变种 B+树

MySQL中 myisam 与 innodb 的区别?

  1. 事务支持
    • MyISAM :强调的是性能,每次查询具有原子性 , 其执行数 度比 InnoDB 类型更快,但是不提供事务支持。
    • InnoDB:提供事 务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚 (rollback)和崩溃修复能力(crash recovery capabilities)的事务安全 (transaction-safe (ACID compliant))型表。
  2. InnoDB 支持行级锁,而 MyISAM 支持表级锁.
    • 用户在操作 myisam 表时,select,update,delete,insert 语句都会给表自动 加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插 入新的数据。
  3. InnoDB 支持 MVCC, 而 MyISAM 不支持
  4. InnoDB 支持外键,而 MyISAM 不支持
  5. 表主键
    • MyISAM :允许没有任何索引和主键的表存在,索引都是保 存行的地址。
    • InnoDB:如果没有设定主键或者非空唯一索引,就会 自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附 加索引保存的是主索引的值。
  6. InnoDB 不支持全文索引,而 MyISAM 支持。
  7. 可移植性、备份及恢复
    • MyISAM :数据是以文件的形式存储,所以 在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进 行操作。
    • InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十 G 的时候就相对痛 苦了
  8. 存储结构
    • MyISAM :每个 MyISAM 在磁盘上存储成三个文件。第一 个文件的名字以表的名字开始,扩展名指出文件类型。 .frm 文件存储表 定义。数据文件的扩展名为 .MYD (MYData) 。索引文件的扩展名 是 .MYI (MYIndex) 。
    • InnoDB:所有的表都保存在同一个数据文件 中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大 小只受限于操作系统文件的大小,一般为 2GB。

MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现) 的?

InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与 Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB 这 种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级 锁,否则,InnoDB 将使用表锁!