数据库
1. mySQL数据库索引的类型有哪些?
主键索引 ,唯一索引,普通索引,覆盖索引,全文索引,组合索引,空间索引,哈希索引,
前缀索引,自适应哈希索引
1. 主键索引
• 作用:用于唯一标识表中的每一行数据,确保数据的唯一性和完整性。
• 特点:每个表只能有一个主键索引,主键列不允许为 NULL。
2. 唯一索引
• 作用:确保索引列中的所有值都是唯一的,但允许有 NULL 值。
• 特点:可以有多个唯一索引,但每个索引列的值必须是唯一的。
3. 普通索引(Normal Index)
• 作用:用于加速数据检索,不强制唯一性。
• 特点:可以有多个普通索引,允许索引列中的值重复。
4. 覆盖索引(Covering Index)
• 作用:包含查询所需的所有列的索引,可以直接从索引中获取数据,而不需要访问表。
• 特点:提高查询性能,减少磁盘 I/O。
5. 全文索引(Full-Text Index)
• 作用:用于全文搜索,支持对文本内容进行高效的搜索。
• 特点:适用于大文本字段,如文章内容、产品描述等。
6. 组合索引(Composite Index)
• 作用:在多个列上创建的索引,用于加速多列条件的查询。
• 特点:索引的顺序很重要,查询条件必须包含组合索引的前缀列才能使用该索引。
7. 空间索引(Spatial Index)
• 作用:用于加速空间数据的查询,如地理位置数据。
• 特点:适用于地理信息系统(GIS)应用。
8. 哈希索引(Hash Index)
• 作用:使用哈希表实现索引,适用于等值查询。
• 特点:只支持等值查询,不支持范围查询。
9. 前缀索引(Prefix Index)
• 作用:对字符串列的前缀创建索引,减少索引的大小。
• 特点:适用于长字符串列,但可能会降低索引的选择性。
10. 自适应哈希索引(Adaptive Hash Index)
• 作用:InnoDB 存储引擎自动创建的哈希索引,用于加速频繁访问的数据页。
• 特点:自动管理,不需要手动创建。
使用场景
• 主键索引:适用于需要唯一标识每一行数据的场景。
• 唯一索引:适用于需要确保某些列值唯一的场景。
• 普通索引:适用于需要加速数据检索的场景。
• 覆盖索引:适用于查询频繁访问的列,且查询条件包含这些列的场景。
• 全文索引:适用于需要对大文本进行全文搜索的场景。
• 组合索引:适用于需要加速多列条件查询的场景。
• 空间索引:适用于需要处理地理位置数据的场景。
• 哈希索引:适用于等值查询频繁的场景。
• 前缀索引:适用于长字符串列,且需要减少索引大小的场景。
• 自适应哈希索引:适用于 InnoDB 存储引擎,自动优化频繁访问的数据页。
通过合理选择和使用不同类型的索引,可以显著提高数据库的查询性能。
2.主建索引,唯一索引,普通索引 区别?
1.主键索引
• 定义: 主键索引是唯一标识表中每一行记录的索引。每个表只能有一个主键索引。
• 唯一性: 主键索引的值必须是唯一的,且不能为NULL。
• 用途: 用于确保数据的唯一性和快速检索。
2.唯一索引
• 定义: 唯一索引确保索引列中的所有值都是唯一的,但可以有多个唯一索引。
• 唯一性: 唯一索引的值必须是唯一的,但可以为NULL(通常只允许一个NULL值)。
• 用途: 用于确保数据的唯一性,但不一定是主键。
3.普通索引
• 定义: 普通索引是最基本的索引类型,用于加速数据检索,但不强制唯一性。
• 唯一性: 普通索引的值可以重复,也可以为NULL。
• 用途: 用于提高查询性能,但不保证唯一性。
3.mysql索引是不是越多越好?
- 查询性能提升
• 好处: 索引可以显著提高查询速度,尤其是对于大型表和复杂查询。
• 适用场景: 适用于经常被查询的列,尤其是WHERE子句、JOIN条件和ORDER BY子句中使用的列。 - 写操作性能下降
• 负面影响: 索引会增加插入、更新和删除操作的开销。每次写操作都需要更新索引,这会降低写操作的性能。
• 适用场景: 对于写操作频繁的表,过多的索引可能会导致性能下降。 - 存储空间增加
• 负面影响: 每个索引都需要占用额外的存储空间。过多的索引会增加数据库的存储需求。
• 适用场景: 对于存储空间有限的环境,过多的索引可能会导致存储空间不足。 - 维护成本增加
• 负面影响: 索引需要定期维护,以确保其有效性。过多的索引会增加维护成本。
• 适用场景: 对于需要频繁维护的数据库,过多的索引可能会增加维护的复杂性和成本。 - 索引选择性
• 重要性: 索引的选择性(即索引列中不同值的数量与总行数的比率)对查询性能有很大影响。选择性越高,索引的效果越好。
• 适用场景: 对于选择性低的列(如性别、状态等),索引的效果可能不明显。
总结
选择性高的列: 优先为选择性高的列创建索引。
频繁查询的列: 为经常用于查询条件的列创建索引。
写操作少的表: 对于写操作较少的表,可以适当增加索引。
定期评估: 定期评估和优化索引,删除不必要的索引。
4.索引失效场景?
使用函数或表达式
• 场景: 在查询条件中对索引列使用函数或表达式。