我这样使用MySQL和数据库设计。
该数据库是医院的部分设计。 在患者表中有超过1.500.000的患者记录。 在诊所表有15个记录。 在医生表中有25条记录。 在诊断表中有超过500条记录。 在out_condition表中有10条记录。
表transaction_current中要关联的所有表。 完成后,事务移至历史表。
这是一个糟糕的设计吗?因为在查询选择中,需要一分钟以上才能让一名患者进入浏览模式。 如果这是最好的关系设计,我应该如何使用包含所有关系表引用的事务表的select查询。
感谢您的帮助。
编辑: “对不起......我的图像设计在哪里?只有我的borwser呢?......”
这是样本选择查询
select transaction_current.registration_number,
transaction_current.Date_registration,
patient.mr_code,
patient.patient_name,
clinic.Poly_clinic_name,
doctor.doctor_name,
diagnose.diagnose_name,
out_condition.OC_name
from transaction_current,patient, clinic, doctor, diagnose, out_condition
where transaction_current.patient_code=patient.MR_code and
transaction_current.clinic_code=clinic.clinic_code and
transaction_current.doctor_code=doctor.doctor_code and
transaction_current.diagnose_code=diagnose.doagnose_code and
transaction_current.OC_code=Out_Condition.OC_code
and patient.patient_name = 'xxx%'
回答: 经过先生的仔细回答。 rj45,有时不推荐任何标准化。特别是对于历史数据。如果参考表中有变化,则历史数据也将被更改。 像这样的情况...... 如果代码更改医生或删除,则记录将遵循更改历史记录。当它不在遗嘱中。它的极端,数据历史不会出来,因为关系代码没有匹配。 非常感谢@ rj45
答案 0 :(得分:0)
最好在查询中应用一些优化步骤。
例如: - 在查询中适当使用运算符EXISTS,IN和表连接
最好避免在where子句中进行过多的比较。我相信这是你有滞后的地方。您可以比较具有构建索引的字段。因此查询会更快。
P.S。 :尽管规范化有时会更好地坚持较少规范化的形式(通过经验;))
答案 1 :(得分:0)
你的桌子设计似乎很好。它是标准化的,我不希望设计出现任何性能问题。使用引擎的更多细节(InnoDB?),特定表格的定义和现有指数将有助于其他人提供更多建议。
您的查询似乎正在加入4个相当小的表和两个较大的表(patient
和transaction_current
)。因此,如果您在图像显示时定义了外键并将它们编入索引(并且引用和引用的列具有相同的数据类型),则此查询应该非常快。
最可能的瓶颈是patient_name
上没有索引。这需要对patient
表进行表扫描。