Skip to content

MySQL 索引问题 #4

@Love-OverFlow

Description

@Love-OverFlow

/main/src/mysql/indexing.md

索引的优化(使用索引的注意事项)

索引不会包含有NULL值的列,IS NULL,IS NOT NULL无法使用索引:

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以在数据库设计时,尽量使用NOT NULL约束以及默认值。

有误,可以在包含 NULL 的列上建立索引,但是这就会导致优化器在做索引选择的时候更加复杂,性能下降,因为可为 NULL 的列会使索引、索引统计和值比较都更复杂,比如进行索引统计时,count 会省略值为 NULL 的行。 -- 《小林coding

实验:

  1. Mysql在字段为允许null时,存在null值,会不会影响索引使用
  2. 包含 NULL 列的复合索引上的查询也可以走索引

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions