mysql行到列查询在500k行上太慢(10秒)

时间:2016-05-24 10:36:13

标签: mysql select

在查询大约500.000行表analisi_campo_free和6行表campo_free需要大约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,
          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       

感谢您的帮助

0 个答案:

没有答案