MYSQL优化一个包含137000行的表

MYSQL优化一个包含137000行的表,mysql,redmine,mysql-management,Mysql,Redmine,Mysql Management,我试图在数据库变得太痛苦之前对其进行优化;更改(基本上是所有SVN更改的日志)为137000行(ish),表格设置为b asic默认设置。无钥匙包装等 该表如下 ID int[11] Auto Inc (PK) changeset_id int[11] action varchar[1] path varchar[255] from_path varchar[255] from_revision varchar[255] revision varchar[255] branch varchar

我试图在数据库变得太痛苦之前对其进行优化;更改(基本上是所有SVN更改的日志)为137000行(ish),表格设置为b asic默认设置。无钥匙包装等

该表如下

ID int[11] Auto Inc (PK)
changeset_id int[11]
action varchar[1]
path varchar[255]
from_path varchar[255]
from_revision varchar[255]
revision varchar[255]
branch  varchar[255]
索引:主(ID),
变更集\u id设置为索引BTREE

全部基于拉丁1字符集,基于来自

表引擎是InnoDB 打包密钥设置为默认值(仅打包char varchar)

所有其他选项都已关闭


优化此功能的最佳方法是什么?(Bar Truncate;o))

这完全取决于您的读写特性,即您正在进行的查询,以及您向其写入的频率

优化写入的方法是最小化索引的数量。理想情况下,使用MS SQL server中的“聚集索引”和单调递增的键,确保将新记录写入表的末尾,而不写入其他单独的索引。甚至更好的是,如果不需要任何事务功能,可以跳过DBMS并写入某种普通的旧日志文件

对于查询,这可能会变得非常复杂。但是,请记住,如果查询需要表中的大量数据(即,它不仅仅是基于键查找单个记录),那么表扫描可能不是一件坏事。一般来说,如果要检查表中超过3-5%的内容,则表扫描会非常快。同样,对于这一点,普通的旧文件可能比DBMS快


如果你必须对两者进行优化,考虑优化写,然后定期复制一个优化查询,并对副本进行查询。

< Py>有一些MySQL的一般优化技术:第一个是确保你的数据类型适合ABCS(参见)。从上到下看,ID和changeset_ID看起来不错,action应该是char而不是varchar(如果可以将其留空,则可以为null(通常,请确保在其他字段上正确设置了null))。至于其他5个字段(这取决于表的大小),字符串是正确的数据类型吗?(我猜path、from_path、branch都是肯定的,但修订版应该是一个数字(我猜不是这样,它支持git或其他东西))


而且,它们看起来像规范化目标,特别是因为“路径”和“修订”表将规范化其中四个(如果需要的话)

您希望优化什么?查询速度?磁盘上占用的空间?是时候进行全表扫描了@对于这个巨大的表,我认为查询速度可能是最重要的一点。
revision
需要是一个字符串来支持git和其他非数字SCM。您调整
操作的大小可能是对的,我只看到“A”、“M”、“D”和“R”。