MySQL-我应该如何索引该表?

时间:2018-12-28 11:09:34

标签: mysql indexing

我有一张表,其中存储了用户电视节目的电视,我想对其进行改进

该表包含以下列:

  • USER_ID
  • SHOW_ID
  • STATUS
  • PROGRESS |观看了最后一集
  • IS_FAVORITE
  • RATING

我有以下索引:

  • USER_ID & SHOW_ID |小学
  • USER_ID |需要外键
  • SHOW_ID |需要外键
  • USER_ID & STATUS
  • USER_ID & IS_FAVORITE
  • SHOW_ID & STATUS
  • SHOW_ID & IS_FAVORITE

我大约有2000万行,数据权重约为750MB,索引权重约为2GB,总计约2.75GB 我认为索引太多,但也许确实需要提高性能,我应该像这样保留还是删除最后四个索引?为什么?

1 个答案:

答案 0 :(得分:1)

与数据相比,索引的大小肯定看起来很大。

但是,问题的答案在很大程度上取决于针对此表运行的查询。您应该了解自己的查询,因此可以对它们进行逐一分析:如果找到了所有查询都不使用的索引,则将其删除。

如果您不知道查询,并且您正在运行MySQL 5.6或更高版本,则可以使用PERFORMANCE_SCHEMA访问索引IO统计信息(自上次数据库重新启动以来)。这可以用来检测未使用的索引,例如:

{{1}}

有关更多信息,请参见this discussion。但是,使用此方法时要小心:您可能有一个每月或每季度依赖于奇数索引的查询,可能不会在短期分析中显示。