我有此查询,现在大约需要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/