MYSQL优化137000行的表

时间:2009-06-05 11:21:49

标签: mysql redmine mysql-management

我正在尝试优化redmine数据库,然后才会出现太大的痛苦;更改(基本上是所有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),
changeset_id设置为INDEX BTREE

基于来自http://forge.mysql.com/wiki/Top10SQLPerformanceTips

的一些信息,所有关于latin1字符集的内容

表引擎是InnoDB Pack Keys设置为Default(仅包char varchar)

所有其他选项均已关闭。

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

2 个答案:

答案 0 :(得分:2)

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

优化写入的方法是最小化索引的数量。理想情况下,您使用MS SQL服务器中的内容将是具有单调递增键的“聚簇索引”,确保您将新记录写入表的末尾,并且不编写其他单独的索引。更好的是,如果您不需要任何事务功能,则跳过DBMS并写入某种普通的旧日志文件。

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

如果必须针对两者进行优化,请考虑优化写入,然后定期复制以优化查询,并针对副本执行查询。

答案 1 :(得分:2)

mysql有一些通用的优化技术:首先要确保你的数据类型符合ABCs(参见here)。然后从上到下,ID和changeset_id看起来很好,动作应该是char 1而不是varchar(如果你可以将它留空,则可为空(通常,确保你的nullable设置正确)其他领域))。至于其他5个字段(取决于大小可能会占据表格),字符串是否为正确的数据类型? (我猜是路径,from_path,分支,但是修改应该是一个数字(我猜它不是因为它支持git或其他东西))

此外,它们看起来像规范化目标,特别是因为“路径”和“修订”表会规范化其中的四个(here's a basic tutorial,如果您需要它)