我是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