索引的建立怎么考虑

索引(Index)是数据库优化的重要手段,加快查询、降低I/O,但也有代价(增加写入成本、占用空间)。设计索引时要考虑业务场景、查询模式、数据量和更新频率。


🔎 一、索引的核心作用:

  • 快速定位数据(加快查询速度)
  • 减少磁盘I/O
  • 提高排序、分组、聚合性能

🔎 二、建立索引的核心考虑因素

考虑维度具体建议
查询频率高频查询字段优先建索引(如搜索条件 WHERE 中常用字段)
区分度(选择性)选择性高(唯一性强)字段建索引效果好,如手机号、身份证号
联合索引顺序优先把区分度高的字段放在前面,满足最左前缀原则
覆盖查询通过索引能直接返回需要的字段,减少回表
避免小表建索引小表全表扫描反而快,索引收益小
更新频率低频繁更新、插入的字段慎建索引,避免增加维护成本
避免在经常变化的字段建索引如状态字段不断变化,维护代价大
避免在大文本、BLOB字段上建索引性能低下,占用空间大

🔎 三、联合索引设计要点(面试高频)

  • 遵循 最左前缀原则
    • (a, b, c) 联合索引
    • 支持 (a)(a, b)(a, b, c) 查询
    • 不支持 (b)(b, c)
  • 尽量让 过滤性强的字段靠前,减少扫描数据量

🔎 四、哪些场景不适合建索引?

  • 数据量小、查询简单的表
  • 经常变动的字段(如频繁更新的状态、计数等字段)
  • WHERE 过滤条件中极少使用的字段
  • 低区分度字段(如性别、是否删除标识)
  • 超大字段(text/blob/json)

🔎 五、索引类型(MySQL为例)

类型说明
普通索引(Index)最基础的索引,加速查询
唯一索引(Unique)保证唯一性 + 加速查询
主键索引(Primary Key)主键默认建立唯一索引
全文索引(FullText)适用于大文本全文搜索(MyISAM引擎)
复合索引(联合索引)多个字段组成,提高多条件查询效率

🔎 六、面试高分回答模板:

建立索引时主要考虑字段的查询频率、区分度(选择性)、更新频率和业务场景。优先给高频查询且区分度高的字段建索引,设计联合索引时遵循最左前缀原则,并兼顾覆盖索引优化查询性能。同时避免在小表、低区分度或频繁更新的字段上盲目建索引,综合权衡查询与写入性能。

🔎 七、实战经验总结:

✅ 数据量大且稳定的核心业务表,索引优化收益最大
✅ 善用 EXPLAIN 分析SQL走不走索引
✅ 索引=双刃剑,读快、写慢,设计时结合业务需求、访问模式综合考虑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值