2

カスケード患者(250,000レコード)-患者属性(250,000レコード)-検査(1,000,000レコード)に3つのテーブルがあります患者:患者属性は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

この場合、簡単にするために結合は役に立ちません。後でこのクエリからビューを作成したいと思います。これらの結合は外部キーを介して結合され、常に 1 つのレコードがあるため、DB を除いてビュー内の未使用の列を省略し、未使用の結合を省略します。

クエリの無駄な結合を省略するために、クエリ3を高速化するためにdb構造に何かを設定する必要がありますか?

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