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