2011-06-02 98 views
0

我是MySQl的新手。请原谅一些错误的术语。我有一个关于在MySQL中索引和分割表的问题。我正在使用Web服务器。有3个非常大的表格经常被查询。表格及其字段如下:MySQL提高性能大表

对齐方式:ali_id,chain1_id,chain2_id .....; Seed:seed_id,ali_id,.....;片段:seed_id .......

种子包含给定对齐的一个或多个记录。片段包含一个或多个种子记录。

的表的大小是对齐 - 8.3GB,种子 - 26GB和碎片 - 127GB

这些表具有非常大的指标:对齐具有用于chain1_id,chain2_id,ali_id,(chain1_id和chain2_id)指数和( chain2_id和chain1_id)。因此索引文件本身的大小是27G,大约是对齐表的3倍大小。

这是否合适?

此外,由于表大小变得非常大,服务器不断崩溃。把桌子拆分成更小的桌子是不错的主意。我很困惑,因为我不确定多个select语句是否也会降低服务器的速度。

谢谢。

Regards, Amit。

表已经有人创建else.I猜他们分别为:

create Table Alignment (
ali_id int(11) PRIMARY KEY, 
chain_id1 int(11), 
chain_id2 int(11), 
param_id smallint(6), 
date datetime); 

create Table Seed(
seed_id int(11), 
Ne smallint(5), 
rmsd float, 
ali_id int(11), 
identics smallint(6)); 

* Seed has 5 more fields, all are smallint(6) 

create table Fragment (
start1 smallint(6), 
start2 smallint(6), 
len smallint(6), 
seed_id bigint(20)); 

有查询需要很长的时间是:

select a.chain_id2, s.Ne, s.rmsd, s.zN, s.ali_id, s.identics, s.positives, s.nFrg, s.cMatch, s.cont1, s.cont2, s.bMatch, s.back1, s.back2, s.seed_id 

from Alignment AS a, Chain AS c, Seed AS s 

WHERE (a.chain_id1 = c.chain_id) and a.ali_id = s.ali_id and c.pdb_chain = "$pdb_here" and s.zN > $ZLIM; 

命中数可能有所不同100- 2000

它运行在Linux机器上的apache服务器上,带有4 GB RAM的Intel Quad Core @ 2.5 GHz。

+1

可能是有益的,和一些典型(慢)查询。也是你的服务器规格。 – 2011-06-02 02:12:26

+0

您可以发布“CREATE TABLE Alignment”的输出和Seed和Fragment吗?你的查询是什么样的?一般返回多少行? – 2011-06-02 02:15:13

+0

请编辑您的问题并在此处添加此额外信息。这是太难以阅读的评论;) – 2011-06-02 02:58:17

回答

0

我可能假设你的db还没有被优化。在MySQL中,你可以重建索引,你可以优化表,你可以执行一些表维护语句[1]

[1] http://dev.mysql.com/doc/refman/5.1/en /table-maintenance-sql.html

下一步,看到您的数据可能呈指数级增长。
看看http://www.mysql.com/products/cluster/,看看你是否也可以为此做好准备。

+1

当优化一个表时,它只会解决像删除开销这样的问题。这不是一种优化数据库的整体方法。 – 2011-06-02 02:18:55

+0

这不是。但是在最初阶段,我建议作者通过这些命令来“优化”/“清理”。同时,我们/或作者需要仔细检查表格以进一步扣除或正常化。仅仅基于这个问题,几乎没有人能够判断放缓是来自查询还是表结构本身。 – 2011-06-02 03:17:48

0

不要担心表格的大小。它应该不会导致任何问题,如果你确保索引正确设置。另外,您要确保任何冗余信息都存储在单独的数据库中。您可以通过JOIN查询轻松检索它。

如果你的服务器一直崩溃,它要么不能处理负载(数据库很大,我认为你也有相当多的访问者的负载),或者你可能有一些硬件问题(如故障硬盘, 例如)。另外,您的查询可能需要进行一些优化。缓慢的查询可能会导致您的表被锁定的时间延长,暂停新的查询....以及以下任何情况都不好。

1

分区表将是明显的地方开始,如果你向我们展示你的“创建表”报表