| Version 2 (modified by , 2 months ago) ( diff ) |
|---|
Индекси и анализа на перформанси
Овој извештај ги опфаќа најважните индекси што во реална примена ќе придонесат на подобри перформанси во 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);
Споредување на перформанси
Attachments (2)
- query2-index.PNG (93.7 KB ) - added by 7 weeks ago.
- query2-noindex.PNG (94.4 KB ) - added by 7 weeks ago.
Download all attachments as: .zip
