2

我在级联患者中有 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  
4

0 回答 0