我正在尝试优化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))
答案 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,如果您需要它)