[英]Improve query performance in MySQL
我發布這個帖子是為了對我的SQL查詢的性能提出一些建議。 我實際上有兩個表,一個用大約44657169行調用HGVS_SNP
,另一個在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'
我猜你自己加入一個帶有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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.