Hello,
I need some help understanding why my indexes do not seem to be affecting my
searches. I would really appreciate help understanding what indexes I need
to make this query run faster. I realize that I use wildcards when searching
for g1.gene_name, but is there anything I can do to make that less of a
problem? I ran EXPLAIN on the search I wanted to optimize and got the
following:
EXPLAIN SELECT c1.SFID FROM Gene g1, cDNA c1, Transcript t1, Refseq r1 WHERE
(c1.SFID = t1.cDNA_SFID AND t1.gene_SFID = g1.SFID AND (g1.gene_sym = 'hh'
OR g1.genbank_acc = 'hh' OR g1.gene_name LIKE '%hh%')) OR (c1.genbank_acc =
'hh' OR c1.SUID = 'hh') OR (c1.SFID = t1.cDNA_SFID AND t1.gene_SFID =
g1.SFID AND g1.locuslink_id = r1.locuslink_id AND (r1.mRNA_acc = 'hh'));
+-------+-------+--------------------------+------+---------+------+--------
+-------------------------+
| table | type | possible_keys | key | key_len | ref | rows
| Extra |
+-------+-------+--------------------------+------+---------+------+--------
+-------------------------+
| r1 | index | mRNA_acc,llid,r ma,rllid | rma | 25 | NULL | 20093
| Using index |
| g1 | ALL | PRIMARY,llid,gg s,gga,gll | NULL | NULL | NULL | 190475
| |
| c1 | ALL | PRIMARY,cga,cs | NULL | NULL | NULL | 43714
| where used |
| t1 | index | gene_SFID,gS,cS ,tg,tc | gS | 4 | NULL | 47238
| where used; Using index |
+-------+-------+--------------------------+------+---------+------+--------
+-------------------------+
I have the following indexes (which were all added after the database was
populated):
ALTER TABLE cDNA ADD INDEX cga
(genbank_acc, SFID);
ALTER TABLE cDNA ADD INDEX co
(organism, SFID);
ALTER TABLE cDNA ADD INDEX cs
(SUID, SFID);
ALTER TABLE Gene ADD INDEX ggs
(gene_sym, SFID);
ALTER TABLE Gene ADD INDEX gga
(genbank_acc, SFID);
ALTER TABLE Gene ADD INDEX ggn
(gene_name, SFID);
ALTER TABLE Gene ADD INDEX go
(organism, SFID);
ALTER TABLE Gene ADD INDEX gll
(locuslink_id, SFID);
ALTER TABLE Gene ADD INDEX gui
(unigene_id, SFID);
ALTER TABLE Transcript ADD INDEX tg
(gene_SFID, cDNA_SFID);
ALTER TABLE Transcript ADD INDEX tc
(cDNA_SFID);
ALTER TABLE Refseq ADD INDEX rma
(mRNA_acc, locuslink_id);
ALTER TABLE Refseq ADD INDEX rllid
(locuslink_id);
I need some help understanding why my indexes do not seem to be affecting my
searches. I would really appreciate help understanding what indexes I need
to make this query run faster. I realize that I use wildcards when searching
for g1.gene_name, but is there anything I can do to make that less of a
problem? I ran EXPLAIN on the search I wanted to optimize and got the
following:
EXPLAIN SELECT c1.SFID FROM Gene g1, cDNA c1, Transcript t1, Refseq r1 WHERE
(c1.SFID = t1.cDNA_SFID AND t1.gene_SFID = g1.SFID AND (g1.gene_sym = 'hh'
OR g1.genbank_acc = 'hh' OR g1.gene_name LIKE '%hh%')) OR (c1.genbank_acc =
'hh' OR c1.SUID = 'hh') OR (c1.SFID = t1.cDNA_SFID AND t1.gene_SFID =
g1.SFID AND g1.locuslink_id = r1.locuslink_id AND (r1.mRNA_acc = 'hh'));
+-------+-------+--------------------------+------+---------+------+--------
+-------------------------+
| table | type | possible_keys | key | key_len | ref | rows
| Extra |
+-------+-------+--------------------------+------+---------+------+--------
+-------------------------+
| r1 | index | mRNA_acc,llid,r ma,rllid | rma | 25 | NULL | 20093
| Using index |
| g1 | ALL | PRIMARY,llid,gg s,gga,gll | NULL | NULL | NULL | 190475
| |
| c1 | ALL | PRIMARY,cga,cs | NULL | NULL | NULL | 43714
| where used |
| t1 | index | gene_SFID,gS,cS ,tg,tc | gS | 4 | NULL | 47238
| where used; Using index |
+-------+-------+--------------------------+------+---------+------+--------
+-------------------------+
I have the following indexes (which were all added after the database was
populated):
ALTER TABLE cDNA ADD INDEX cga
(genbank_acc, SFID);
ALTER TABLE cDNA ADD INDEX co
(organism, SFID);
ALTER TABLE cDNA ADD INDEX cs
(SUID, SFID);
ALTER TABLE Gene ADD INDEX ggs
(gene_sym, SFID);
ALTER TABLE Gene ADD INDEX gga
(genbank_acc, SFID);
ALTER TABLE Gene ADD INDEX ggn
(gene_name, SFID);
ALTER TABLE Gene ADD INDEX go
(organism, SFID);
ALTER TABLE Gene ADD INDEX gll
(locuslink_id, SFID);
ALTER TABLE Gene ADD INDEX gui
(unigene_id, SFID);
ALTER TABLE Transcript ADD INDEX tg
(gene_SFID, cDNA_SFID);
ALTER TABLE Transcript ADD INDEX tc
(cDNA_SFID);
ALTER TABLE Refseq ADD INDEX rma
(mRNA_acc, locuslink_id);
ALTER TABLE Refseq ADD INDEX rllid
(locuslink_id);
Comment