如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。指的是通过索引就能查询到我们所需要的数据,而不需要根据索引再去查询数据表中的数据( 回表),这样就减少了数据库的 io 操作,提高查询效率。 使用表中的多个字段创建索引,就是联合索引,也叫组合索引或复合索引。 最左前缀匹配原则指的是在使
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。例如,MySQL 会根据需要自动将字符串转换为数字,反之亦然。以下规则描述了比较操作的转换方式: 两个参数至少有一个是NULL时,比较的结果也是NULL,特殊的情况是使用<=>对两个NULL做比较时会返回1,这两
查询 当普通索引为条件时查询到数据会一直扫描,直到扫完整张表; 当唯一索引为查询条件时,查到该数据会直接返回,不会继续扫表; 更新 普通索引会直接将操作更新到 change buffer 中,然后结束 唯一索引需要判断数据是否冲突 所以唯一索引更加适合查询的场景,普通索引更
索引失效也是慢查询的主要原因之一,常见的导致索引失效的情况有下面这些: 使用 SELECT * 进行查询; 创建了组合索引,但查询条件未准守最左匹配原则; 在索引列上进行计算、函数、类型转换等操作; 以 % 开头的 LIKE 查询比如 like ‘%abc’; 查询条件中使用 or,且 or 的前
不为 NULL 的字段 :索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用 0,1,true,false 这样语义较为清晰的短值或短字符作为替代。 被频繁查询的字段 :我们创建索引的字段应该是查询操作非常频繁的字段。 被作为条
一个事情由n个单元组成,这n个单元在执行过程中,要么同时成功,要么同时失败,这就把n个单元放在了一个事务之中。举个简单的例子:在不考虑试题正确与否的前提下,一张试卷由多个题目构成,当你答完题交给老师的时候是将一整张试卷交给老师,而不是将每道题单独交给老师,在这里试卷就可以理解成一个事务。 事务的特性: A:原子性(