如何使用MySQL索引列?

Rob*_*cks 14 mysql sql indexing foreign-keys primary-key

你什么时候使用每个MySQL索引类型?

  • PRIMARY - 主键列?
  • 独特 - 外键?
  • INDEX - ??

对于非常大的表,索引列是否可以提高性能?

mar*_*kus 20

主键是 - 顾名思义 - 表的主键,应该是一个通常用于选择该表行的列.主键始终是唯一键(唯一标识符).主键不限于一列,例如在参考表(多对多)中,使主键包括两列或更多列通常是有意义的.

独特

唯一索引可确保您的DBMS不接受此列的重复条目.你问'外键?' 没有!这没有用,因为外键每个定义都容易出现重复(一对多,多对多).

指数

其他索引可以放在通常用于SELECTS(和JOINS)的列上,这通常是外键的情况.在许多情况下,如果外键被索引,则SELECT(和JOIN)查询将更快.

但请注意 - 正如SquareCog所阐明的那样 - 索引会对数据的任何修改进行更新,因此,添加更多索引会导致INSERT/UPDATE性能下降.如果索引没有得到更新,您将获得不同的信息,具体取决于优化器是否决定在索引或原始表上运行查询 - 这是一种非常不受欢迎的情况.

这意味着,您应该仔细评估指数的使用情况.有一点可以肯定的是:必须避免使用未使用的指数.删除!

  • 索引会在对数据进行任何修改时得到更新,因此,添加更多索引会导致INSERT/UPDATE性能下降.如果索引没有得到更新,您将获得不同的信息,具体取决于优化器是否决定在索引或原始表上运行查询 - 这是一种非常不受欢迎的情况. (2认同)