2016-04-25 119 views
3

我正在發佈此線程以獲得有關我的SQL查詢性能的一些建議。 我實際上有2個表格,其中一個稱爲HGVS_SNP約44657169行,另一個表格爲run,平均有2000行。 當我嘗試更新我的run table的字段評論時,需要很長時間來執行查詢。我想知道是否有任何方法來增加我的SQL查詢。 HGVS_SNP表提高MySQL中的查詢性能

結構:

+-----------+-------------+------+-----+---------+-------+ 
| 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

obviuos懷疑是你加入的字段有差異t類型和'hgvs_name'似乎缺少索引。 –

+0

這個「不喜歡」並不幸運,正如我所看到的那樣,沒有「計算」字段的索引 – vaso123

+0

在「計算」列上添加索引,如果沒有必要則避免使用「LIKE」 – mitkosoft

回答

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' 
+1

感謝所有的回覆:)。 @米海,謝謝你,你的解決方案適合我。 – user979974