关于索引建立的七个能用原则

本文探讨了数据库索引在实际应用中的优化原则,包括如何选择建立索引的字段、索引类型的选择以及如何合理利用索引来提升查询效率。重点阐述了在过滤器字段、GROUP BY 和 ORDER BY 操作后的字段、低重复值字段、联接列以及复合索引的建立等关键点。

索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则:

1. 在经常用作过滤器的字段上建立索引;
2. 在SQL语句中经常进行GROUP BY、ORDER BY的字段上建立索引;
3. 在不同值较少的字段上不必要建立索引,如性别字段;
4. 对于经常存取的列避免建立索引;
5. 用于联接的列(主健/外健)上建立索引;
6. 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定;
7. 缺省情况下建立的是非簇集索引,但在以下情况下最好考虑簇集索引,如:含有有限数目(不是很少)唯一的列;进行大范围的查询;充分的利用索引可以减少表扫描I/0的次数,有效的避免对整表的搜索。当然合理的索引要建立在对各种查询的分析和预测中,也取决于DBA的所设计的数据库结构。

1.每一张表尽量有主键,通常是一个主键,也可以将多个字段做成组合主键,或称为联合主键.即每条记录这多个字段不能全都相同.主键是用来表示唯一,联合主键一般不超过三个字段,主键是一种特殊的索引,只是不能重复.
2.索引简单理解为对某个字段的排序,查询起来很快,但写入比较慢.
3.主键没必要再建成索引,一般都是外键字段建成索引

### 三级标题:MySQL 索引优化技巧与最佳实践 MySQL 的索引优化是数据库性能调优的关键环节,通过合理设计和使用索引,可以显著提升查询效率并减少系统资源消耗。以下是一些常见的 MySQL 索引优化技巧及建立索引原则。 #### 索引选择性优化 在创建索引时,应优先考虑高选择性的字段,即该字段中不同值的数量与总记录数的比值较高。当这个比值大于 0.2 时,通常认为该字段适合建立索引。对于长字符串类型的字段,建议使用前缀索引(如 `ALTER TABLE users ADD INDEX idx_email(email(10))`),这样可以在保证查询效率的同时节省存储空间 [^3]。 #### 存储精简原则 为了提高查询速度并降低 I/O 消耗,字段的选择应遵循“精简存储”原则。整型字段相比字符串类型更优,因为数值比较的速度更快。此外,对于字符串索引,推荐使用其前 20% 的字符来构建索引,这通常可以覆盖 80% 的查询需求。在联合索引的设计上,高频查询字段应置于左侧,短字段优先,例如 `(status, create_time)` 相较于 `(create_time, status)` 更高效 [^3]。 #### 联合索引设计原则 联合索引的设计需遵循最左前缀法则,即查询条件中必须包含联合索引的最左字段才能有效利用索引。对于包含排序操作的查询(如 `WHERE a=1 ORDER BY b`),建议创建 `(a, b)` 形式的联合索引以避免额外的排序开销。此外,在多表 JOIN 查询中,关联键必须建立索引以提升连接效率 [^3]。 #### 排序与分页优化 对于需要进行排序和分页的查询操作,可以通过先查询出主键 ID 再回表获取完整数据的方式进行优化。例如: ```sql SELECT * FROM employees e INNER JOIN ( SELECT id FROM employees ORDER BY name LIMIT 90000, 5 ) ed ON e.id = ed.id; ``` 这种方式能够显著减少排序过程中涉及的数据量,从而提升查询性能 [^4]。 #### 主键与二级索引的选择 在执行聚合函数(如 `COUNT(id)`)时,MySQL 会优先选择辅助索引而非主键聚集索引,因为二级索引通常占用更少的存储空间且检索效率更高。这一优化行为自 MySQL 5.7 版本起引入 [^1]。 #### 隐式主键与聚簇索引 如果表中未显式定义主键或唯一索引,MySQL 将自动为表创建一个隐藏的聚簇索引,该索引按照数据的插入顺序组织物理存储结构 [^2]。 #### 复杂查询优化策略 对于复杂的查询场景,如带有 `UNION ALL` 的组合查询,合理使用联合索引可以避免全表扫描。例如: ```sql (SELECT * FROM TBL WHERE A=1 ORDER BY B LIMIT 5) UNION ALL (SELECT * FROM TBL WHERE A=2 ORDER BY B LIMIT 5) ORDER BY B LIMIT 5; ``` 上述查询可以有效地利用 `(A, B)` 联合索引,并仅对少量数据(共 10 行)进行排序操作 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值