mysql 杂记

存储相关

页,数据库管理数据的最小单元
区,预请求磁盘空间单元,确保读取时的效率,根据数据量延伸出四种状态,某些状态下的区直属于表
段,区的集合
表,表空间,管理段和部分区

索引相关

在指定索引时尽量设置索引的 唯一 属性,这种唯一的二级索引,在 等值 查询时性能近乎与主键等价,等值查询不包括 IS NULL 查询

在查询时尽量避免回表(再从聚簇索引拿数据),当查询列和查询条件都是索引时即可避免

使用 OR 时要慎重:一个使用到 索引 A 的搜索条件和没有使用 A 的搜索条件使用 OR 连接起来后将无法使用 A
SELECT * FROM single_table WHERE key2 > 100 OR common_field = ‘abc’;
其中 key2 和 common_field 都有各自的索引
那么上述查询语句将无法按照预期使用 key2 的索引,而是会拿所有 key2 的值去回表,在回表的时候使用 common_field 的索引

对于联合索引,查询条件要注意索引列声明的顺序,且只有左边的查询条件是 等值 查询时右边的查询条件才能继续使用联合索引

索引列必须和常数比较才会使用索引,两个列进行比较则不会使用到索引

在执行连接查询时,驱动表被访问一次,被驱动表可能会被访问多次,次数与驱动表数据量有关(扇出)

在创建索引时,如果可以尽量使用唯一索引

事务相关

事务:脏读,脏写,不可重复读,幻读
脏读和脏写强调回滚:当前事务操作了另一个事务 B 的中间状态数据,而事务 B 即将执行回滚
不可重复读:当前事务多次读取同一组数据时,发现数据不同,类似于幻读,但覆盖到其他事务对数据的修改和删除操作
幻读强调读取到了新数据:当前事务以相同条件多次读取数据时,发现了之前没有见过的数据,因为其他事务插入了新数据