diff --git a/backend/transit/cron_approaching_alerts.php b/backend/transit/cron_approaching_alerts.php index 0ead2d27..cfcc7004 100644 --- a/backend/transit/cron_approaching_alerts.php +++ b/backend/transit/cron_approaching_alerts.php @@ -2,9 +2,10 @@ // backend/transit/cron_approaching_alerts.php // يُنفذ كل دقيقة عبر Cron Job لإرسال تنبيهات اقتراب الباص من المحطات (أقل من 2 كم) // -// ملاحظة أداء: الاستعلام الأول رخيص (فهرس idx على status)، ولكل رحلة نشطة -// فقط استعلامان إضافيان — ويُتجاهل فوراً أي رحلة بلا موقع GPS حديث (< 3 دقائق) -// لتفادي ضرب القاعدة لرحلات متوقفة أو باصات فقدت الاتصال. +// ملاحظة أداء: الاستعلام الأول يستخدم فهرس idx_status (WHERE status='started') +// فيقرأ فقط الرحلات الجارية الآن (عددها = عدد الباصات على الطريق، صغير)، لا كل +// الجدول. لكل رحلة نشطة استعلامان إضافيان فقط، ويُتجاهل فوراً أي رحلة بلا موقع +// GPS حديث (< 3 دقائق). خارج أوقات الدوام (لا رحلات) يخرج فوراً بلا أي عمل. require_once __DIR__ . '/../core/bootstrap.php'; require_once __DIR__ . '/functions.php'; diff --git a/backend/transit/schema_transit.sql b/backend/transit/schema_transit.sql index 727677b3..4d361850 100644 --- a/backend/transit/schema_transit.sql +++ b/backend/transit/schema_transit.sql @@ -213,7 +213,8 @@ CREATE TABLE IF NOT EXISTS `transit_trips` ( UNIQUE KEY `uq_schedule_date` (`schedule_id`, `trip_date`), KEY `idx_route_date` (`route_id`, `trip_date`), KEY `idx_org_date` (`org_id`, `trip_date`), - KEY `idx_driver_date` (`driver_id`, `trip_date`) + KEY `idx_driver_date` (`driver_id`, `trip_date`), + KEY `idx_status` (`status`) -- cron_approaching_alerts يستعلم WHERE status='started' كل دقيقة ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ----------------------------------------------------------------- @@ -342,6 +343,8 @@ SET FOREIGN_KEY_CHECKS = 1; -- (بدونها: Admin/transit/route/approve.php بإجراء reject يفشل بخطأ SQL دائماً) -- ALTER TABLE transit_drivers ADD KEY idx_main_driver (main_driver_id); -- (بدونها: كل استعلام transitResolveDriver / driver/me.php = مسح جدول كامل) +-- ALTER TABLE transit_trips ADD KEY idx_status (status); +-- (بدونها: cron_approaching_alerts كل دقيقة = مسح جدول transit_trips كامل) -- ----------------------------------------------------------------- -- -----------------------------------------------------------------