使用SELECT语句加载数据INFILE

时间:2014-07-14 05:39:27

标签: mysql sql csv load-data-infile

我有以下数据库关系: enter image description here

我还要将这个大型CSV文件插入bmt_transcripts

Ensembl Gene ID Ensembl Transcript ID
ENSG00000261657 ENST00000566782
ENSG00000261657 ENST00000562780
ENSG00000261657 ENST00000569579
ENSG00000261657 ENST00000568242

问题是无法将Ensemble Gene ID作为字符串插入,我需要从bmt_genes表中找到它的ID,所以我想出了这段代码:

LOAD DATA INFILE 'filename.csv'
INTO TABLE `bmt_transcripts`
(@gene_ensembl, ensembl_id)
    SET gene_id = (SELECT id FROM bmt_genes WHERE ensembl_id = @gene_ensembl);

然而,加载7mb CSV需要30多分钟,这太长了。我假设它为它插入的每一行运行一个表范围的查询,这显然非常低效。我知道我可以将数据加载到临时表中并从中加载SELECT(是的,在大约5秒内运行),但是这个CSV可能会增长到大约20列,这对于为。编写select语句会变得难以处理。 / p>

如何修复LOAD DATA INFILE查询(在另一个表上运行SELECT)以在合理的时间内运行?

0 个答案:

没有答案