我是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。
可能是有益的,和一些典型(慢)查询。也是你的服务器规格。 – 2011-06-02 02:12:26
您可以发布“CREATE TABLE Alignment”的输出和Seed和Fragment吗?你的查询是什么样的?一般返回多少行? – 2011-06-02 02:15:13
请编辑您的问题并在此处添加此额外信息。这是太难以阅读的评论;) – 2011-06-02 02:58:17