我正在尝试优化 红矿 在数据库变得太痛苦之前;更改(基本上是所有 SVN 更改的日志)为 137000 行(左右),并且该表设置为基本默认设置。无钥匙包装等。

表格如下

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

全部基于 latin1 字符集,基于以下信息 http://forge.mysql.com/wiki/Top10SQLPerformanceTips

表引擎是Innodb Pack键设置为默认(只有包装char varchar)

所有其他选项均已关闭。

优化这个的最佳方法是什么?(小节截断;o))

有帮助吗?

解决方案

mysql有一些通用的优化技巧:首先是确保您的数据类型符合 ABC(请参阅 这里)。从上到下看,ID和changeset_id看起来不错,action可能应该是一个char1 而不是 varchar(如果可以将其留空,则可以为空(并且一般来说,请确保在其他字段上正确设置了可为空))。至于其他 5 个字段(根据大小可能会主导表),字符串是正确的数据类型吗?(我猜是路径,from_path,分支,但也许修订应该是一个数字(我猜它不是,所以它支持 git 或其他东西))

此外,它们看起来像标准化目标,特别是因为“路径”和“修订”表将标准化其中四个(这是一个基本教程, ,如果你需要的话)

其他提示

这完全取决于你的读取和写入的特性,即你正在做的查询,以及多久你写的吧。

,以优化用于写入的方法是最小化的索引的数量。理想情况下,你用什么在MS SQL服务器将是“聚集索引”与单调递增密钥,以确保你写新记录表中的末尾,你写的没有其他单独的索引。更重要的是,即使是跳过DBMS和写入某种普通的旧的日志文件,如果你不需要任何交易能力。

有关查询,嗯,这能得到像你一样复杂。千万记住,不过,如果你需要从表中数据的任何显著量查询(即,它不仅仅是查找基于一个关键的一条记录),表扫描可能不是一件坏事。一般来说,如果您正在检查的表的内容超过3-5%,表扫描会非常快。再次,为此,一个普通的旧文件可能比一个DBMS更快。

如果您有以优化双方,考虑优化写入,然后在你优化查询定期制作副本,做查询对副本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top