我有以下数据库关系:
我还要将这个大型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)以在合理的时间内运行?