我试图在红矿数据库太痛苦之前优化它;更改(基本上是所有SVN更改的日志)位于137000行(ish),表设置为b默认设置。没有钥匙包装等。
表如下
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设置为索引
全部基于latin1字符集,基于来自http://forge.mysql.com/wiki/Top10SQLPerformanceTips的一些信息
表引擎是InnoDB包键被设置为默认(只有Pack )
所有其他选项都被关闭。
优化这个问题的最好方法是什么?(条形截尾;o) )
发布于 2009-06-05 13:19:23
mysql有一些通用的优化技术:第一种是确保数据类型适合ABC(参见这里)。从上到下,ID和changeset_id看起来都很好,操作应该是char1而不是varchar (如果可以将它保留为空(通常,确保在其他字段上正确设置了可空))。至于其他5个字段(取决于大小可能会主导表),字符串是否是正确的数据类型?(我猜是path,from_path,分支,但也许修订应该是一个数字(我猜它不是支持git之类的))
此外,它们看起来类似于规范化目标,特别是因为“路径”和“修订”表将使其中的四个规范化(如果需要,可以使用这里有一个基本教程)。
发布于 2009-06-05 11:28:36
这完全取决于您的读和写特性,即您正在进行的查询,以及您写入它的频率。
优化写入的方法是最小化索引的数量。理想情况下,您将使用MS SQL server中的“聚集索引”,使用单调递增的键,确保将新记录写入表的末尾,而不编写其他单独的索引。更好的是,如果您不需要任何事务处理功能,则跳过DBMS并写入某个类型的普通旧日志文件。
对于查询,这可以变得非常复杂。但是,请记住,如果您需要从表中获取大量数据来进行查询(也就是说,它不仅仅是根据键查找单个记录),表扫描可能也不是一件坏事。通常,如果您正在检查表中超过3-5%的内容,则表扫描将非常快。同样,对于这一点,一个普通的旧文件可能比DBMS更快。
如果必须对两者进行优化,请考虑为编写进行优化,然后定期对查询进行优化,并对副本执行查询。
https://stackoverflow.com/questions/955394
复制相似问题