-- ✅ تحسينات قاعدة البيانات لتحمل 250 جهاز (1000 طلب/دقيقة)
-- يجب تنفيذ هذه الاستعلامات على قاعدة البيانات لتحسين الأداء

-- 1. ✅ إضافة Indexes على جدول locations (مهم جداً!)
-- هذا يسرع عمليات INSERT و SELECT بشكل كبير
CREATE INDEX IF NOT EXISTS idx_locations_device_id ON locations(device_id);
CREATE INDEX IF NOT EXISTS idx_locations_timestamp ON locations(timestamp);
CREATE INDEX IF NOT EXISTS idx_locations_device_timestamp ON locations(device_id, timestamp);

-- 2. ✅ إضافة Index على جدول devices
CREATE INDEX IF NOT EXISTS idx_devices_device_id ON devices(device_id);
CREATE INDEX IF NOT EXISTS idx_devices_status ON devices(status);

-- 3. ✅ تحسين جدول locations - إضافة Index مركب للاستعلامات الشائعة
CREATE INDEX IF NOT EXISTS idx_locations_device_status ON locations(device_id, status);

-- 4. ✅ تحسين جدول locations - إضافة Index للبحث بالتاريخ
CREATE INDEX IF NOT EXISTS idx_locations_date ON locations(DATE(timestamp));

-- 5. ✅ تحسين إعدادات MySQL/MariaDB للأداء العالي
-- يجب إضافة هذه الإعدادات في ملف my.cnf أو my.ini:

/*
[mysqld]
# ✅ تحسين الأداء للكتابة العالية
innodb_buffer_pool_size = 1G          # حجم Buffer Pool (يجب أن يكون 70-80% من RAM)
innodb_log_file_size = 256M            # حجم Log File
innodb_flush_log_at_trx_commit = 2     # تحسين الأداء (2 = أفضل للأداء العالي)
innodb_flush_method = O_DIRECT         # تحسين الأداء
max_connections = 500                  # عدد الاتصالات المتزامنة
thread_cache_size = 50                 # تحسين إدارة Threads
table_open_cache = 2000                # تحسين فتح الجداول
query_cache_size = 0                    # تعطيل Query Cache (غير مستخدم في MySQL 8.0+)

# ✅ تحسين للأداء العالي
innodb_file_per_table = 1              # ملف منفصل لكل جدول
innodb_io_capacity = 2000              # تحسين I/O
innodb_read_io_threads = 4              # عدد Threads للقراءة
innodb_write_io_threads = 4             # عدد Threads للكتابة
*/

-- 6. ✅ تحسين جدول locations - إضافة Partitioning حسب التاريخ (اختياري)
-- هذا مفيد إذا كان لديك ملايين السجلات
-- ALTER TABLE locations PARTITION BY RANGE (TO_DAYS(timestamp)) (
--     PARTITION p2024_01 VALUES LESS THAN (TO_DAYS('2024-02-01')),
--     PARTITION p2024_02 VALUES LESS THAN (TO_DAYS('2024-03-01')),
--     -- إضافة المزيد حسب الحاجة
--     PARTITION p_future VALUES LESS THAN MAXVALUE
-- );

-- 7. ✅ تحسين جدول locations - حذف البيانات القديمة تلقائياً (اختياري)
-- يمكن استخدام Event Scheduler لحذف البيانات القديمة تلقائياً
-- CREATE EVENT IF NOT EXISTS cleanup_old_locations
-- ON SCHEDULE EVERY 1 DAY
-- DO
--   DELETE FROM locations WHERE timestamp < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- 8. ✅ تحسين جدول locations - تحسين نوع البيانات
-- تأكد من أن الأعمدة تستخدم أنواع البيانات المناسبة:
-- device_id: VARCHAR(255) مع INDEX
-- timestamp: DATETIME مع INDEX
-- latitude/longitude: DECIMAL(10,8) أو DOUBLE
-- speed, accuracy, altitude, heading: DECIMAL(10,2) أو FLOAT

-- 9. ✅ تحسين جدول devices - إضافة UNIQUE INDEX على device_id
-- هذا يضمن عدم وجود أجهزة مكررة ويسرع ON DUPLICATE KEY UPDATE
ALTER TABLE devices ADD UNIQUE INDEX IF NOT EXISTS unique_device_id (device_id);

-- 10. ✅ تحليل الجداول بانتظام (يُنفذ أسبوعياً)
-- ANALYZE TABLE locations;
-- ANALYZE TABLE devices;

-- 11. ✅ تحسين الاستعلامات - استخدام EXPLAIN لفحص الأداء
-- EXPLAIN INSERT INTO locations ...;
-- EXPLAIN SELECT * FROM locations WHERE device_id = 'xxx' AND timestamp > '...';

-- ملاحظات مهمة:
-- 1. ✅ يجب تنفيذ Indexes قبل البدء في استخدام السكربت
-- 2. ✅ يجب مراقبة الأداء باستخدام SHOW PROCESSLIST و SHOW STATUS
-- 3. ✅ يجب ضبط إعدادات MySQL حسب موارد الخادم
-- 4. ✅ يجب استخدام Connection Pooling في config.php
-- 5. ✅ يجب مراقبة حجم قاعدة البيانات وحذف البيانات القديمة بانتظام

