常见索引原则有

1、选择唯一性索引,唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。
2、为经常需要排序、分组和联合操作的字段建立索引:
3、为常作为查询条件的字段建立索引。
4、限制索引的数目:越多的索引,会使更新表变得很浪费时间。尽量使用数据量少的索引
6、如果索引的值很长,那么查询的速度会受到影响。尽量使用前缀来索引
7、如果索引字段的值很长,最好使用值的前缀来索引。
8、删除不再使用或者很少使用的索引
9、最左前缀匹配原则,非常重要的原则。
10、尽量选择区分度高的列作为索引,区分度的公式是表示字段不重复的比例
11、索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。
12、尽量的扩展索引,不要新建索引。

转载于:https://my.oschina.net/u/2277088/blog/3023842

### 常见索引类型及其分类 数据库索引是提高查询性能的关键工具,不同类型的索引适用于不同的查询场景和数据结构需求。以下是常见索引类型及其分类: #### 1. 按照结构分类 - **B+ 树索引**:这是最常见的一种索引结构,尤其在MySQL中被广泛使用。B+ 树索引是一种平衡多叉树结构,支持高效的范围查询和等值查询。它的特点是叶子节点存储实际数据的指针,且所有叶子节点之间通过指针相连,从而支持高效的范围扫描操作[^3]。 - **哈希索引**:基于哈希表实现,主要用于等值查询,查询效率非常高。然而,它不支持范围查询和排序操作。哈希索引在内存数据库中应用较多,例如在MySQL的Memory引擎中使用[^3]。 - **全文索引**:用于处理文本数据,支持模糊匹配和全文搜索。全文索引通常基于倒排索引技术实现,适用于搜索引擎等场景。MySQL从5.6版本开始支持InnoDB引擎的全文索引。 - **位图索引**:适用于低基数列(如性别、状态字段),通过位图来表示数据的存在性。位图索引在数据仓库中非常高效,能够快速进行多条件组合查询[^1]。 - **空间索引**:专门用于地理信息数据(GIS数据),支持空间查询操作,如范围查询和邻近查询。MySQL中的空间索引基于R树实现。 #### 2. 按照字段数量分类 - **单列索引**:针对单个字段创建的索引,适用于单一条件的查询场景。单列索引的创建和维护相对简单,但在多条件查询时效率可能较低。 - **复合索引**:包含多个字段的索引,适用于多条件查询。复合索引的字段顺序非常重要,遵循最左前缀原则。例如,复合索引(A, B, C)可以支持查询条件A、A+B、A+B+C,但不支持B+C或C。 #### 3. 按照用途分类 - **主键索引**:主键字段默认建立的唯一索引,用于唯一标识表中的每一行。主键索引不仅加速查询,还保证数据的完整性[^3]。 - **唯一索引**:确保字段值的唯一性,例如用户名、身份证号等字段。唯一索引允许NULL值,但只能有一个NULL值[^3]。 - **普通索引**:仅用于加速查询,不强制字段值的唯一性。普通索引适用于大多数查询场景[^3]。 - **聚集索引**:表中行的物理存储顺序与索引键值的逻辑顺序一致。每个表只能有一个聚集索引,因为行的物理顺序只能有一种。聚集索引通常提供更快的数据访问速度,因为它直接指向数据本身[^4]。 - **非聚集索引**:表中行的物理存储顺序与索引键值的逻辑顺序不一致。非聚集索引通过指向聚集索引或数据行的指针来访问数据。非聚集索引适用于多条件查询和排序操作[^4]。 #### 4. 索引的原理区别 - **B+ 树索引**:基于平衡多叉树结构,所有叶子节点位于同一层,支持高效的范围查询和等值查询。叶子节点存储实际数据的指针,且叶子节点之间通过指针相连,便于范围扫描。 - **哈希索引**:基于哈希表实现,通过哈希函数将键值映射到特定位置,支持快速的等值查询。但不支持范围查询和排序操作[^3]。 - **全文索引**:基于倒排索引技术,将文本数据拆分为关键词,并记录每个关键词出现的位置。全文索引支持模糊匹配和全文搜索。 - **位图索引**:通过位图表示数据的存在性,每个位代表一个值是否存在于某行。位图索引适用于低基数列,能够快速进行多条件组合查询[^1]。 - **空间索引**:基于R树实现,专门用于地理信息数据。空间索引支持空间查询操作,如范围查询和邻近查询。 ### 索引的适用场景 - **B+ 树索引**:适用于大多数查询场景,尤其是需要范围查询和排序操作的场景。 - **哈希索引**:适用于等值查询,例如用户登录时的用户名匹配。 - **全文索引**:适用于文本数据的模糊匹配,如搜索引擎关键字匹配。 - **位图索引**:适用于低基数列的多条件组合查询,如性别、状态字段。 - **空间索引**:适用于地理信息数据的查询,如地图应用中的邻近查询。 ### 示例代码 以下是一个创建复合索引的SQL示例: ```sql CREATE INDEX idx_user_name_email ON user (name, email); ``` 该复合索引适用于查询条件包含`name`和`email`的场景,遵循最左前缀原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值