wiki:Indexes

Индекси и анализа на перформанси


Овој извештај ги опфаќа најважните индекси што во реална примена ќе придонесат на подобри перформанси во 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);


Споредување на перформанси

Last modified 34 hours ago Last modified on 08/31/25 21:53:04
Note: See TracWiki for help on using the wiki.