我在级联患者中有 3 个表(250 000 个记录)-患者属性(250 000 个记录)-检查(1 000 000 个记录)患者:患者属性为 1:N 患者属性:检查为 1:N
query1 非常快(0.000 秒):
SELECT examination.ID AS Eid
FROM examination
ORDER BY eid LIMIT 10000,50
query2 仍然很快(0.015 秒):
SELECT examination.ID AS Eid
FROM examination
JOIN `patient_attributes`
ON `examination`.`PATIENT_ATTRIBUTES_ID` = `patient_attributes`.`ID`
ORDER BY eid LIMIT 10000,50
query3 很慢(5.5 秒):
SELECT examination.ID AS Eid
FROM `examination`
JOIN `patient_attributes`
ON `examination`.`PATIENT_ATTRIBUTES_ID` = `patient_attributes`.`ID`
JOIN `patient` ON `patient_attributes`.`PATIENT_ID` = `patient`.`ID`
ORDER BY eid LIMIT 10000,50
为了简单起见,在这种情况下连接是无用的。稍后我想从此查询创建视图,除了 DB 之外,我会省略视图中未使用的列并省略未使用的连接,因为这些连接是通过外键连接的,并且总是有一条记录。
我应该在 db 结构中设置一些东西来加速查询3,以省略查询中的无用连接吗?
examination.ID is primary key,
examination.PATIENT_ATTRIBUTES_ID is foreign key,
patient_attributes.ID is primary key,
patient_attributes.PATIENT_ID is foreign key,
patient.ID is primary key
show index from patient
Table Non_uniq Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type
patient 0 PRIMARY 1 ID A 230077 NULL NULL BTREE
patient 1 RefMEMO1001 1 ANAMNESIS_MEMO_ID A 80 NULL NULL YES BTREE
patient 1 REF17 1 RACE_ID A 4 NULL NULL YES BTREE
patient 1 REF5 1 CARD_INDEX_ID A 6 NULL NULL BTREE
show index from patient_attributes
Table Non_unique Key_name Seq_in_idx Col.name Collation Cardinality Sub_part Packed Null Index_type
patient_attributes 0 PRIMARY 1 ID A 1857048 NULL NULL BTREE
patient_attributes 1 RefPATIENT1021 1 PATIENT_ID A 619016 NULL NULL BTREE
patient_attributes 1 RefMEMO1081 1 SYMPTOMS_MEMO_ID A 2 NULL NULL YES BTREE
show index from examination
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type
examination 0 PRIMARY 1 ID A 905353 NULL NULL BTREE
examination 0 I_EXAMINATION_GUID 1 UNIQUE_GUID A 905353 NULL NULL BTREE
examination 0 I_PATIENT_GUID 1 UNIQUE_GUID A 905353 NULL NULL BTREE
examination 1 RefSTATION621 1 STATION_ID A 2 NULL NULL YES BTREE
examination 1 I_EXAMINATION_STATUS 1 STATUS A 6 NULL NULL BTREE
examination 1 I_EXAMINATION_CREATED 1 CREATED A 181070 NULL NULL BTREE
examination 1 I_EXAMINATION_STARTED 1 STARTED A 181070 NULL NULL BTREE
examination 1 RefPATIENT_ATTRIBUTES1031 1 PATIENT_ATTRIBUTES_ID A 905353 NULL NULL BTREE