如何确定是否可以从展示次数表中删除某些索引

我正在使用基于Ruby on Rails的网站的印象派gem。 我们的数据库是mysql。 印象表大约是2M记录,这对MySql没有任何问题。 表大小为800M,开始对我们的服务器征税。 表的数据大小为200M,索引大小为600M。 大多数索引都是由gem预定义的。 有没有办法弄清楚是否正在使用或可以删除​​这些索引?

1,310,855,040 controlleraction_session_index

1,310,855,040 controlleraction_ip_index

1,310,855,040 controlleraction_request_index

–880,757,504 poly_request_index

–880,757,504 impressionable_type_message_index

–880,757,504 poly_session_index

–880,757,504 poly_ip_index

—– 6,854,144主要

他们的README说:“还没有报道……这件事只是创造了数据。”

创建索引以加速计数方法。

@widget.impressionist_count @widget.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-05") 

在这些方法中删除应用程序中未使用的所有字段的索引应该是安全的。

注意:这个答案来自阅读他们的源代码几分钟。我没有使用过gem

您可以手动或使用Percona工具查找重复索引(顺便说一下,该工具的文档说明了重复索引的内容。

http://www.percona.com/doc/percona-toolkit/2.2/pt-duplicate-key-checker.html

如果您确定索引是重复的,则可以在没有不良影响的情况下DROP它。

除此之外,您需要分析查询负载并确定您的查询是否不使用所有索引。 这真的很辛苦。 您可以从打开MySQL常规查询日志开始一两天或高峰生产小时开始。 然后,您可以分析日志中的查询。 例如,您可以在前50个最常见的查询中使用EXPLAIN ,并查看正在使用的索引。

如果删除某些索引,则需要密切关注系统性能; 你可能错过了重要的东西,你需要重新制作它们。

但是看一下:我们在谈论这里不到一美元的磁盘空间。 如果您使用昂贵的固态磁盘驱动器,可能是5美元。 如果由于这些表的大小而导致MySQL速度变慢,那么请花时间调整它,而不是试图节省两千兆字节的磁盘表空间。 也许你需要调整内部RAM缓冲区大小,甚至添加索引,或者某些东西。

这是一些很好的材料。 http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/