我有此查询,现在大约需要0.57秒:

SELECT analisi0_.ID_ANALISI AS col_0_0_,
       paziente5_.ID_PAZIENTE_LAB AS col_1_0_,
       sessione1_.ID_GEL AS col_2_0_,
       patologico8_.patologico AS col_3_0_,
       tipovalida9_.TIPO_VALIDAZIONE AS col_4_0_,
       specie7_.specie AS col_5_0_,
       analisi0_.campione AS col_6_0_,
       analisi0_.tracciato AS col_7_0_,
       paziente5_.cognome AS col_8_0_,
       paziente5_.nome AS col_9_0_,
       paziente5_.DATA_NASCITA AS col_10_0_,
       sesso6_.sesso AS col_11_0_,
       sessione1_.NUMERO_SESSIONE AS col_12_0_,
       sessione1_.DATA_SESSIONE AS col_13_0_,
       metodica4_.metodica AS col_14_0_
FROM Analisi analisi0_
  INNER JOIN Sessione sessione1_ ON analisi0_.ID_SESSIONE = sessione1_.ID_SESSIONE
  INNER JOIN tipo_sessione tiposessio2_ ON sessione1_.ID_TIPO_SESSIONE = tiposessio2_.ID_TIPO_SESSIONE
  INNER JOIN metodica_tipo_metodica metodicati3_ ON tiposessio2_.ID_METODICA_TIPO_METODICA = metodicati3_.ID_METODICA_TIPO_METODICA
  INNER JOIN Metodica metodica4_ ON metodicati3_.ID_METODICA = metodica4_.ID_METODICA
  INNER JOIN Paziente paziente5_ ON analisi0_.ID_PAZIENTE = paziente5_.ID_PAZIENTE
  INNER JOIN Sesso sesso6_ ON paziente5_.ID_SESSO = sesso6_.ID_SESSO
  INNER JOIN Specie specie7_ ON paziente5_.ID_SPECIE = specie7_.ID_SPECIE
  LEFT OUTER JOIN Patologico patologico8_ ON analisi0_.ID_PATOLOGICO = patologico8_.ID_PATOLOGICO
  INNER JOIN tipo_validazione tipovalida9_ ON analisi0_.ID_TIPO_VALIDAZIONE = tipovalida9_.ID_TIPO_VALIDAZIONE
WHERE 1 = 1
AND   (paziente5_.nome LIKE 'MARIA%')
AND   (paziente5_.DATA_NASCITA IS NOT NULL OR paziente5_.DATA_NASCITA > 0)
LIMIT 20;


问题是通过以下方式添加此默认订单:

ORDER BY sessione1_.DATA_SESSIONE ASC


查询将在25秒内执行。

未分类的解释是:

id  select_type table   partitions  type    possible_keys   key key_len ref rows    filtered    Extra
1   SIMPLE  specie7_        index   PRIMARY SPECIE  137     1   100 Using index
1   SIMPLE  paziente5_      ALL PRIMARY,IDX_DATA_NASCITA,IDX_NOME,FK_PAZIENTE_SPECIE,FK_PAZIENTE_SESSO              690950  5   Range checked for each record (index map: 0x3B)
1   SIMPLE  sesso6_     eq_ref  PRIMARY PRIMARY 1   elettroforesi.paziente5_.ID_SESSO   1   100
1   SIMPLE  analisi0_       ref FK_ANALISI_PAZIENTE,FK_ANALISI_SESSIONE,FK_ANALISI_TIPO_VALIDAZIONE FK_ANALISI_PAZIENTE 4   elettroforesi.paziente5_.ID_PAZIENTE    1   100
1   SIMPLE  tipovalida9_        eq_ref  PRIMARY PRIMARY 1   elettroforesi.analisi0_.ID_TIPO_VALIDAZIONE 1   100
1   SIMPLE  patologico8_        eq_ref  PRIMARY PRIMARY 1   elettroforesi.analisi0_.ID_PATOLOGICO   1   100
1   SIMPLE  sessione1_      eq_ref  PRIMARY,FK_SESSIONE_TIPO_SESSIONE   PRIMARY 4   elettroforesi.analisi0_.ID_SESSIONE 1   100
1   SIMPLE  tiposessio2_        eq_ref  PRIMARY,FK_TIPO_SESSIONE_METODICA_TIPO_METODICA PRIMARY 2   elettroforesi.sessione1_.ID_TIPO_SESSIONE   1   100
1   SIMPLE  metodicati3_        eq_ref  PRIMARY,ID_METODICA PRIMARY 2   elettroforesi.tiposessio2_.ID_METODICA_TIPO_METODICA    1   100
1   SIMPLE  metodica4_      eq_ref  PRIMARY PRIMARY 2   elettroforesi.metodicati3_.ID_METODICA  1   100


而排序版本的说明是

id  select_type table   partitions  type    possible_keys   key key_len ref rows    filtered    Extra
1   SIMPLE  specie7_        index   PRIMARY SPECIE  137     1   100 Using index; Using temporary; Using filesort
1   SIMPLE  paziente5_      ALL PRIMARY,IDX_DATA_NASCITA,IDX_NOME,FK_PAZIENTE_SPECIE,FK_PAZIENTE_SESSO              690950  5   Range checked for each record (index map: 0x3B)
1   SIMPLE  sesso6_     eq_ref  PRIMARY PRIMARY 1   elettroforesi.paziente5_.ID_SESSO   1   100
1   SIMPLE  analisi0_       ref FK_ANALISI_PAZIENTE,FK_ANALISI_SESSIONE,FK_ANALISI_TIPO_VALIDAZIONE FK_ANALISI_PAZIENTE 4   elettroforesi.paziente5_.ID_PAZIENTE    1   100
1   SIMPLE  tipovalida9_        eq_ref  PRIMARY PRIMARY 1   elettroforesi.analisi0_.ID_TIPO_VALIDAZIONE 1   100
1   SIMPLE  patologico8_        eq_ref  PRIMARY PRIMARY 1   elettroforesi.analisi0_.ID_PATOLOGICO   1   100
1   SIMPLE  sessione1_      eq_ref  PRIMARY,FK_SESSIONE_TIPO_SESSIONE   PRIMARY 4   elettroforesi.analisi0_.ID_SESSIONE 1   100
1   SIMPLE  tiposessio2_        eq_ref  PRIMARY,FK_TIPO_SESSIONE_METODICA_TIPO_METODICA PRIMARY 2   elettroforesi.sessione1_.ID_TIPO_SESSIONE   1   100
1   SIMPLE  metodicati3_        eq_ref  PRIMARY,ID_METODICA PRIMARY 2   elettroforesi.tiposessio2_.ID_METODICA_TIPO_METODICA    1   100
1   SIMPLE  metodica4_      eq_ref  PRIMARY PRIMARY 2   elettroforesi.metodicati3_.ID_METODICA  1   100


SESSIONE表上的索引:

Table   Non_unique  Key_name    Seq_in_index    Column_name Collation   Cardinality Sub_part    Packed  Null    Index_type  Comment Index_comment
sessione    0   PRIMARY 1   ID_SESSIONE A   44468               BTREE
sessione    1   IDX_DATA_SESSIONE   1   DATA_SESSIONE   A   878             BTREE
sessione    1   IDX_NUMERO_SESSIONE 1   NUMERO_SESSIONE A   168             BTREE
sessione    1   FK_SESSIONE_TIPO_SESSIONE   1   ID_TIPO_SESSIONE    A   6               BTREE
sessione    1   FK_SESSIONE_UTENTE_INSERIMENTO  1   ID_UTENTE_INSERIMENTO   A   1               BTREE


有什么建议可以加快默认顺序吗?

编辑:

按照脚本创建表:

CREATE TABLE PAZIENTE
(
   ID_PAZIENTE          INT           UNSIGNED NOT NULL AUTO_INCREMENT,
   ID_PAZIENTE_LAB      VARCHAR(20),
   COGNOME              VARCHAR(40),
   NOME                 VARCHAR(40),
   DATA_NASCITA         DATE,
   ID_SESSO             TINYINT UNSIGNED NOT NULL,
   RECAPITO             VARCHAR(50),
   CODICE_FISCALE       VARCHAR(30),
   ID_SPECIE            TINYINT UNSIGNED NOT NULL,
   PRIMARY KEY (ID_PAZIENTE),
   INDEX IDX_DATA_NASCITA (DATA_NASCITA),
   INDEX IDX_COGNOME (COGNOME),
   INDEX IDX_NOME (NOME),
   CONSTRAINT FK_PAZIENTE_SPECIE FOREIGN KEY (ID_SPECIE) REFERENCES SPECIE(ID_SPECIE),
   CONSTRAINT FK_PAZIENTE_SESSO FOREIGN KEY (ID_SESSO) REFERENCES SESSO(ID_SESSO)
)
ENGINE=InnoDB;




CREATE TABLE ANALISI
(
   ID_ANALISI               INT             UNSIGNED NOT NULL AUTO_INCREMENT,
   ID_PAZIENTE              INT             UNSIGNED NOT NULL,
   ID_SESSIONE              INT             UNSIGNED NOT NULL,
   TRACCIATO                TINYINT         UNSIGNED NOT NULL,
   CAMPIONE                 VARCHAR(30),
   ID_PATOLOGICO            TINYINT         UNSIGNED,
   REPARTO                  VARCHAR(40),
   TOTALE_PROTEINE          FLOAT,
   RAPP_AG                  FLOAT,
   ID_ANALISI_LINK          INT             UNSIGNED,
   ID_ANALISI_IFE           INT             UNSIGNED,
   ID_ANALISI_DATI          INT             UNSIGNED,
   ID_ANALISI_NOTA          INT             UNSIGNED,
   DATA_MODIFICA            DATETIME,
   ID_UTENTE_MODIFICA       SMALLINT        UNSIGNED,
   DATA_VALIDAZIONE         DATETIME,
   ID_TIPO_VALIDAZIONE      TINYINT         UNSIGNED NOT NULL,
   ID_UTENTE_VALIDAZIONE    SMALLINT        UNSIGNED,
   DATA_CANCELLAZIONE       DATETIME,
   ID_UTENTE_CANCELLAZIONE  SMALLINT        UNSIGNED,
   PRIMARY KEY (ID_ANALISI),
   INDEX IDX_CAMPIONE (CAMPIONE),
   INDEX IDX_PAZIENTE (ID_PAZIENTE),
   INDEX IDX_SESSIONE (ID_SESSIONE),
   INDEX IDX_REPARTO  (DATA_MODIFICA),
   CONSTRAINT FK_ANALISI_PAZIENTE             FOREIGN KEY (ID_PAZIENTE)             REFERENCES PAZIENTE(ID_PAZIENTE),
   CONSTRAINT FK_ANALISI_SESSIONE             FOREIGN KEY (ID_SESSIONE)             REFERENCES SESSIONE(ID_SESSIONE),
   CONSTRAINT FK_ANALISI_PATOLOGICO           FOREIGN KEY (ID_PATOLOGICO)           REFERENCES PATOLOGICO(ID_PATOLOGICO),
   CONSTRAINT FK_ANALISI_TIPO_VALIDAZIONE     FOREIGN KEY (ID_TIPO_VALIDAZIONE)     REFERENCES TIPO_VALIDAZIONE(ID_TIPO_VALIDAZIONE),
   CONSTRAINT FK_ANALISI_UTENTE_MODIFICA      FOREIGN KEY (ID_UTENTE_MODIFICA)      REFERENCES UTENTE(ID_UTENTE),
   CONSTRAINT FK_ANALISI_UTENTE_VALIDAZIONE   FOREIGN KEY (ID_UTENTE_VALIDAZIONE)   REFERENCES UTENTE(ID_UTENTE),
   CONSTRAINT FK_ANALISI_UTENTE_CANCELLAZIONE FOREIGN KEY (ID_UTENTE_CANCELLAZIONE) REFERENCES UTENTE(ID_UTENTE),
   CONSTRAINT FK_ANALISI_ANALISI_LINK         FOREIGN KEY (ID_ANALISI_LINK)         REFERENCES ANALISI(ID_ANALISI),
   CONSTRAINT FK_ANALISI_ANALISI_IFE          FOREIGN KEY (ID_ANALISI_IFE)          REFERENCES ANALISI_IFE(ID_ANALISI_IFE),
   CONSTRAINT FK_ANALISI_ANALISI_NOTA         FOREIGN KEY (ID_ANALISI_NOTA)         REFERENCES ANALISI_NOTA(ID_ANALISI_NOTA),
   CONSTRAINT FK_ANALISI_ANALISI_DATI         FOREIGN KEY (ID_ANALISI_DATI)         REFERENCES ANALISI_DATI(ID_ANALISI_DATI)
)
ENGINE=InnoDB;

最佳答案

我建议您在表Sessione上添加索引以帮助进行排序:

create index idx_sessione_quick on sessione(id_tipo_sessione, data_sessione);


索引中的第一个字段用于快速查找记录,第二个字段用于顺序。您甚至可以通过覆盖索引来加快速度:

create index idx_sessione_quick on sessione(id_tipo_sessione, data_sessione,
                                            id_gel, numero_sessione);

关于mysql - mysql index on orderby从0到25秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37318150/

10-10 10:56