索引

如果使用的是 MySQL 的话,我们需要了解 MySQL 的存储引擎都支持哪些索引结构,如下图所示(参考来源 https://dev.mysql.com/doc/refman/8.0/en/create-index.html)。如果是其他的 DBMS,可以参考相关的 DBMS 文档。
image.png
你能看到,针对 InnoDB 和 MyISAM 存储引擎,都会默认采用 B+ 树索引,无法使用 Hash 索引。InnoDB 提供的自适应 Hash 是不需要手动指定的。如果是 Memory/Heap 和 NDB 存储引擎,是可以进行选择 Hash 索引的。

事务

我们知道在 MySQL 5.5 版本之前,默认的存储引擎是 MyISAM,在 5.5 版本之后默认存储引擎是 InnoDB。InnoDB 和 MyISAM 区别之一就是 InnoDB 支持事务,也可以说这是 InnoDB 取代 MyISAM 的重要原因。
可以通过 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。image.png
你能看出在 MySQL 中,只有 InnoDB 存储引擎是支持事务的,其他的存储引擎都不支持事务。

当然在数据库中,也有一些情况是不会发生死锁的,比如采用乐观锁的方式。
另外在 MySQL MyISAM 存储引擎中也不会出现死锁,这是因为 MyISAM 总是一次性获得全部的锁,这样的话要么全部满足可以执行,要么就需要全部等待。