在500k行上,mysql行到列查询速度太慢(10秒)
查询表analisi_campo_free的约500.000行和表campo_free的6行大约需要10秒, 这对我来说是个问题,有没有办法优化它在500k行上,mysql行到列查询速度太慢(10秒),mysql,select,Mysql,Select,查询表analisi_campo_free的约500.000行和表campo_free的6行大约需要10秒, 这对我来说是个问题,有没有办法优化它 SELECT acf.ID_ANALISI, max( if(cf.posizione = 1, acf.valore, NULL) ) as campo_free_1, max( if(cf.posizione = 2, acf.valore, NULL) ) as campo_free_2,
SELECT acf.ID_ANALISI,
max( if(cf.posizione = 1, acf.valore, NULL) ) as campo_free_1,
max( if(cf.posizione = 2, acf.valore, NULL) ) as campo_free_2,
max( if(cf.posizione = 3, acf.valore, NULL) ) as campo_free_3,
max( if(cf.posizione = 4, acf.valore, NULL) ) as campo_free_4,
max( if(cf.posizione = 5, acf.valore, NULL) ) as campo_free_5,
max( if(cf.posizione = 6, acf.valore, NULL) ) as campo_free_6
FROM analisi_campo_free acf
inner JOIN campo_free cf ON acf.ID_CAMPO_FREE = cf.ID_CAMPO_FREE
GROUP BY acf.ID_ANALISI;
这就是解释:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE acf ALL ID_ANALISI,FK_ANALISI_CAMPO_FREE_CAMPO_FREE 514271 100 Using temporary; Using filesort
1 SIMPLE cf eq_ref PRIMARY PRIMARY 1 elettroforesi.acf.ID_CAMPO_FREE 1 100
这些表格定义如下:
// ANALISI_CAMPO_FREE
CREATE TABLE ANALISI_CAMPO_FREE
(
ID_ANALISI_CAMPO_FREE INT UNSIGNED NOT NULL AUTO_INCREMENT,
ID_ANALISI INT UNSIGNED NOT NULL,
ID_CAMPO_FREE TINYINT UNSIGNED NOT NULL,
VALORE VARCHAR(45),
PRIMARY KEY(ID_ANALISI_CAMPO_FREE),
INDEX IDX_ID_ANALISI (ID_ANALISI),
CONSTRAINT FK_ANALISI_CAMPO_FREE_ANALISI FOREIGN KEY (ID_ANALISI) REFERENCES ANALISI (ID_ANALISI),
CONSTRAINT FK_ANALISI_CAMPO_FREE_CAMPO_FREE FOREIGN KEY (ID_CAMPO_FREE) REFERENCES CAMPO_FREE (ID_CAMPO_FREE)
)
ENGINE=InnoDB;
// CAMPO_FREE
CREATE TABLE CAMPO_FREE
(
ID_CAMPO_FREE TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
ID_LABORATORIO TINYINT UNSIGNED NOT NULL,
POSIZIONE TINYINT UNSIGNED NOT NULL,
DESCRIZIONE VARCHAR(30) NOT NULL UNIQUE,
UTILIZZATO BIT DEFAULT 0,
PRIMARY KEY(ID_CAMPO_FREE),
UNIQUE (ID_LABORATORIO, POSIZIONE, UTILIZZATO),
CONSTRAINT FK_CAMPO_FREE_LABORATORIO FOREIGN KEY (ID_LABORATORIO) REFERENCES LABORATORIO(ID_LABORATORIO)
)
ENGINE=InnoDB;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
analisi_campo_free 0 PRIMARY 1 ID_ANALISI_CAMPO_FREE A 419292 BTREE
analisi_campo_free 1 IDX_ID_ANALISI 1 ID_ANALISI A 419351 BTREE
analisi_campo_free 1 FK_ANALISI_CAMPO_FREE_CAMPO_FREE 1 ID_CAMPO_FREE A 1 BTREE
感谢您的帮助除了添加适当的索引外,查询看起来还不错。你认为这张表能有多大?大概有2.000.000行,对我来说太慢了,这只是详细说明的一部分。你能推荐一些索引吗?因为有很好的记录,所以投票率较高。Ping的人喜欢这样:嘿@TimBiegeleisen你现在觉得怎么样?蒂姆不太介意骚扰,所以我可以逍遥法外。因此,如果您可以将一个相当大的结果集与导出放在一起,我们可以尝试改进it@Drew我不介意Harrasment,除非它是以否决票的形式发生的。