Индекси и анализа на перформанси
Овој извештај ги опфаќа најважните индекси што во реална примена ќе придонесат на подобри перформанси во SynergyMed. Се фокусира на најфреквентните пребарувања, join-операции и критични бизнис сценарија.
Со овие индекси:
- Покриваме најфреквентни пребарувања (
username
,e_mail
,embg
,medicine_name
) - Подобрена е временската анализа (
payment_date
,order_date
,last_changed
) - Финансиски извештаи се оптимизирани (
status + payment_date
) - JOIN операциите се побрзи (
payment_id
,manufacturer_id
,branded_medicine_id
) - Клучни здравствени функции (рецепти, интеракции на лекови) се извршуваат ефикасно
1. Users (login и профили)
Сценарио:
Корисниците најчесто се бараат по username
и e_mail
за login и проверка на профили.
Индекси:
CREATE INDEX IF NOT EXISTS idx_users_username ON synergymed.users(username); CREATE INDEX IF NOT EXISTS idx_users_email ON synergymed.users(e_mail);
2. ClientOrder и Payment (нарачки и плаќања)
Сценарио:
Финансиски извештаи и анализа на нарачки секогаш користат status
и payment_date
.
JOIN е преку payment_id
.
Индекси:
-- Брзо пребарување по статус на плаќања CREATE INDEX IF NOT EXISTS idx_payment_status ON synergymed.payment(status); -- Временска анализа на плаќања CREATE INDEX IF NOT EXISTS idx_payment_date ON synergymed.payment(payment_date); -- JOIN ClientOrder → Payment CREATE INDEX IF NOT EXISTS idx_clientorder_payment_id ON synergymed.clientorder(payment_id);
3. Medicine и BrandedMedicine (лекови)
Сценарио:
Аптекарите и клиентите пребаруваат по medicine_name
, active_ingredient
или по manufacturer_id
.
Индекси:
CREATE INDEX IF NOT EXISTS idx_medicine_name ON synergymed.medicine(medicine_name); CREATE INDEX IF NOT EXISTS idx_medicine_active_ingredient ON synergymed.medicine(active_ingredient); CREATE INDEX IF NOT EXISTS idx_brandedmedicine_manufacturer_id ON synergymed.brandedmedicine(manufacturer_id);
4. Inventory_BrandedMedicine (залихи)
Сценарио:
Клучна е проверката на количина по branded_medicine_id
и следење на промени со last_changed
.
Индекси:
CREATE INDEX IF NOT EXISTS idx_inventorybm_bmid ON synergymed.inventory_brandedmedicine(branded_medicine_id); CREATE INDEX IF NOT EXISTS idx_inventorybm_last_changed ON synergymed.inventory_brandedmedicine(last_changed);
5. SupplyOrder (набавки)
Сценарио:
Фармациите и дистрибутерите следат status
и order_date
за активни нарачки.
Индекси:
CREATE INDEX IF NOT EXISTS idx_supplyorder_status ON synergymed.supplyorder(status); CREATE INDEX IF NOT EXISTS idx_supplyorder_order_date ON synergymed.supplyorder(order_date);
6. Prescription и SensitiveClientData (пациенти и рецепти)
Сценарио:
Пребарување по embg
(пациент), по client_id
и medicine_id
кај рецепти.
Индекси:
CREATE INDEX IF NOT EXISTS idx_sensitiveclientdata_embg ON synergymed.sensitiveclientdata(embg); CREATE INDEX IF NOT EXISTS idx_prescription_client_id ON synergymed.prescription(client_id); CREATE INDEX IF NOT EXISTS idx_prescription_medicine_id ON synergymed.prescription(medicine_id);
7. MedicineInteraction (интеракции на лекови)
Сценарио: Аптекарите проверуваат комбинации на два лека и интензитет на нивната реакција.
Индекси:
CREATE INDEX IF NOT EXISTS idx_mi_medicine2 ON synergymed.medicineinteraction(medicine_id_2); CREATE INDEX IF NOT EXISTS idx_mi_severity ON synergymed.medicineinteraction(severity);