[MySQL面试题]-索引 45-46 如果表中有字段为null,又被经常查询该不该给这个字段创建索引?

52 阅读1分钟

image.png

45 如果表中有字段为null,又被经常查询该不该给这个字段创建索引?

  1. 频繁查询 nul 值:null值占比不高,可以为该字段创建索引。

where column IS NULL

  1. NULL值占比极高:若字段大部分值为nul,索引可能不会显著提升性能,甚至可能因回表开销导致性能下降。
  2. 联合索引优化:若字段常与其他非 null 字段组合查询,可考虑创建联合索引。

where column1 is null and column2 = ‘value’


46 有字段为null索引是否会失效?

不一定失效

查询条件的影响

  • is null 或 is not null

    • 若 null 值占比低,优化器可能使用索引定位数据
    • 若 null 值占比极高,优化器可能放弃索引而选择全表扫描。
  • = 或 <> 操作符

    • column = nul 不会使用索引(需要 is null)
    • column <> null 可能因 nul 不参与比较导致索引失效
  • 复合索引中的 nul 值

    • 若复合索引的前导列包含 null, 后续列的索引可能无法有效利用。

最好还是给上默认值

数字类型的给0,字符串给个空串“”,