1. MySQL索引类型
B-Tree 索引
Hash 索引
Fulltext 索引
RTree 索引
2. 创建索引符合如下条件
- 较频繁的作为查询条件的字段应该创建索引;
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;
- 更新非常频繁的字段不适合创建索引;
- 不会出现在 WHERE 子句中的字段不该创建索引;
3. 索引优化建议
- 于单键索引,尽量选择针对当前 Query 过滤性更好的索引;
- 选择组合索引的时候,当前 Query 中过滤性最好的字段在索引字段顺序中排列越靠前越好;
- 选择组合索引的时候,尽量选择可以能够包含当前 Query 的 WHERE 子句中更多字段的索引;
- 尽可能通过分析统计信息和调整 Query 的写法来达到选择合适索引的目的而减少通过使用Hint 人为控制索引的选择,因为这会使后期的维护成本增加,同时增加维护所带来的潜在风险;
3. 索引使用限制
- MyISAM存储引擎索引键长度总和不能超过1000字节;
- BLOB和TEXT类型的列只能创建前缀索引;
- MySQL 目前不支持函数索引;
- 使用不等于( != 或者 <>)的时候 MySQL 无法使用索引;
- 过滤字段使用了函数运算后(如abs(column)), MySQL无法使用索引;
- Join 语句中 Join 条件字段类型不一致的时候 MySQL 无法使用索引;
- 使用 LIKE 操作的时候如果条件以通配符开始(’%abc…’) MySQL 无法使用索引;
- 使用非等值查询的时候 MySQL 无法使用 Hash 索引;