我有一张表,其中存储了用户电视节目的电视,我想对其进行改进
该表包含以下列:
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 我认为索引太多,但也许确实需要提高性能,我应该像这样保留还是删除最后四个索引?为什么?
答案 0 :(得分:1)
与数据相比,索引的大小肯定看起来很大。
但是,问题的答案在很大程度上取决于针对此表运行的查询。您应该了解自己的查询,因此可以对它们进行逐一分析:如果找到了所有查询都不使用的索引,则将其删除。
如果您不知道查询,并且您正在运行MySQL 5.6或更高版本,则可以使用PERFORMANCE_SCHEMA
访问索引IO统计信息(自上次数据库重新启动以来)。这可以用来检测未使用的索引,例如:
{{1}}
有关更多信息,请参见this discussion。但是,使用此方法时要小心:您可能有一个每月或每季度依赖于奇数索引的查询,可能不会在短期分析中显示。