提高MySQL的查询性能

时间:2016-04-25 08:09:17

标签: mysql sql performance select join

我发布此帖子是为了对我的SQL查询的性能提出一些建议。 我实际上有两个表,一个叫HGVS_SNP,大约44657169行,另一个叫run表,平均有2000行。 当我尝试更新run table的字段评论时,执行查询需要花费很多时间。我想知道是否有任何方法可以增加我的SQL查询。

HGVS_SNP结构表:

+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| snp_id    | int(11)     | YES  | MUL | NULL    |       |
| hgvs_name | text        | YES  |     | NULL    |       |
| source    | varchar(8)  | NO   |     | NULL    |       |
| upd_time  | varchar(32) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

我的运行表具有以下结构:

+----------------------+--------------+------+-----+---------+-------+
| Field                | Type         | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+-------+
| ID                   | varchar(7)   | YES  |     | NULL    |       |
| Reference            | varchar(7)   | YES  | MUL | NULL    |       |
| HGVSvar2             | varchar(120) | YES  | MUL | NULL    |       |
| Comment              | varchar(120) | YES  |     | NULL    |       |
| Compute              | varchar(20)  | YES  |     | NULL    |       |
+----------------------+--------------+------+-----+---------+-------+

这是我的疑问:

UPDATE run
INNER JOIN SNP_HGVS 
ON run.HGVSvar2=SNP_HGVS.hgvs_name
SET run.Comment=concat('rs',SNP_HGVS.snp_id) WHERE run.Compute not like 'tron'

1 个答案:

答案 0 :(得分:3)

我猜是因为你加入一个带有VARCHAR(120)列的文本列,你真的不需要一个文本列。使它成为VARCHAR,以便您可以将其编入索引

ALTER TABLE `HGVS_SNP` modify hgvs_name VARCHAR(120);

ALTER TABLE `HGVS_SNP` ADD KEY  idx_hgvs_name (hgvs_name);

大型桌子需要一段时间

现在你的JOIN要快得多,还要在计算列上添加一个索引

ALTER TABLE `run` ADD KEY  idx_compute  (compute);

LIKE是不必要的,将其改为

WHERE run.Compute != 'tron'
相关问题