回答·1
最热
最新
- MySQL使用索引的原则主要包括但不限于以下几点: 1. **最左前缀原则**:对于联合索引(即包含多个列的索引),MySQL在查询时会从索引的最左边开始匹配,若查询条件不满足最左边列的完整索引,则无法充分利用该索引。 2. **选择性原则**:索引应建立在选择性较高的列上,即列的唯一性越高越好。选择性指该列不同值的数量与表中总行数的比例,比例越高,索引的选择性越好,查询效率也越高。 3. **索引覆盖原则**(覆盖索引):尽量创建可以覆盖查询所需的全部字段的索引,这样查询可以直接通过索引返回结果,而无需回表查询。 4. **避免冗余索引**:多个索引在功能上重复时,应尽量去除冗余,保留一个即可,以减少索引维护和存储成本。 5. **主键和唯一性索引**:表应具有明确的主键,并且根据业务情况创建唯一性索引,以减少数据冗余和提升查询性能。 6. **排序与分组**:对于经常需要进行排序或分组操作的列,应当创建索引,以便MySQL可以利用索引来加速这类操作。 7. **考虑查询条件**:频繁出现在WHERE子句中的列应创建索引,特别是用于范围查询的列。 8. **索引数量限制**:索引并不是越多越好,过多的索引会占用更多存储空间,影响写操作性能,并增加维护成本。 **索引的数据结构**: MySQL中最常见和广泛使用的是B+树索引,这是MySQL索引实现的主流数据结构,尤其适用于磁盘存储的数据。B+树的特点是所有的叶子节点都在同一层,并且叶子节点之间通过指针相连,形成有序链表,这有利于范围查询和全表扫描。 此外,MySQL还支持其他类型的索引数据结构,例如: - Hash索引:MySQL的Memory存储引擎支持Hash索引,适合于等值查询,但不支持范围查询和排序操作。 - R-Tree索引:主要用于地理空间数据索引,适用于点、线、面等几何对象的查询。 - Full-text索引:用于全文本搜索,能够对文本中的词语进行索引,MyISAM和InnoDB存储引擎都支持全文索引。
- 原则: 1.最左匹配原则 2.高离散度列原则 3.最少空间原则 常见的索引数据结构有: btree,hash
- 应该创建索引的情况 主键自动索引:主键列会自动创建唯一索引 频繁作为查询条件的列:WHERE子句中经常出现的列 外键关系列:用于表连接的列应该建立索引 排序和分组列:ORDER BY、GROUP BY、DISTINCT操作的列 高选择性的列:区分度高(唯一值多)的列更适合建索引 组合索引的最左列:遵循最左前缀原则 不应该或需谨慎创建索引的情况 数据量小的表:小表全表扫描可能比索引更快 频繁更新的列:索引会降低写入性能 区分度低的列:如性别、状态等只有少量取值的列 很少用于查询的列:不常用的查询条件列 大文本或二进制列:不适合建普通索引,可考虑全文索引
- mysql5.5版本之前用到B树,之后用的B+树