supabase-postgres-best-practices
تحسين أداء Postgres باستخدام أفضل الممارسات الخبيرة
متاح أيضًا من: supabase
تعاني تطبيقات Postgres من الاستعلامات البطيئة وتصميم المخطط الضعيف. توفر هذه المهارة 26 قاعدة ذات أولوية من خبراء Supabase لتحقيق تحسينات في الأداء تصل إلى 10-1000 مرة.
تنزيل ZIP المهارة
رفع في Claude
اذهب إلى Settings → Capabilities → Skills → Upload skill
فعّل وابدأ الاستخدام
اختبرها
استخدام "supabase-postgres-best-practices". راجع استعلام Postgres الخاص بي واقترح تحسينات بناءً على أفضل الممارسات: SELECT * FROM events WHERE user_id = 123 ORDER BY created_at DESC LIMIT 20
النتيجة المتوقعة:
بناءً على قواعد query-missing-indexes.md، يحتاج استعلامك إلى فهرس على أعمدة التصفية والترتيب:
1. أضف فهرساً مركباً:
```sql
CREATE INDEX events_user_id_created_at_idx
ON events (user_id, created_at DESC);
```
2. التحسين المتوقع: يقلل فحص الفهرس التكلفة من 25000 إلى 8.44 (أسرع بـ 100-1000 مرة على الجداول الكبيرة).
3. لاستعلامات LIMIT، فكر في استخدام فهارس التغطية لتجنب عمليات البحث في الجدول إذا كنت تحتاج فقط أعمدة محددة.
استخدام "supabase-postgres-best-practices". هل يتبع نمط الإدراج المجمع أفضل الممارسات؟ for (let i = 0; i < 1000; i++) { await db.query('INSERT INTO logs (message) VALUES ($1)', [logs[i]]); }
النتيجة المتوقعة:
لا، هذا ينتهك قواعد data-batch-inserts.md. ��ديك:
- 1000 رحلة ذهاب وعودة فردية
- 1000 معاملة منفصلة
- أبطأ 10-50 مرة من اللازم
النهج الصحيح (من القواعد):
```sql
INSERT INTO logs (message) VALUES
($1), ($2), ($3), ... حتى ~1000 صف;
```
أو استخدم COPY للاستيراد الضخم (أسرع طريقة). راجع data-batch-inserts.md للأمثلة.
استخدام "supabase-postgres-best-practices". هل يجب أن أضيف فهرساً على عمود المفتاح الأجنبي هذا الذي يتم الاستعلام عنه أحياناً؟
النتيجة المتوقعة:
نعم، بالتأكيد. من schema-foreign-key-indexes.md:
**التأثير: حرج (تحسين 5-20 مرة)**
يجب فهرسة أعمدة المفاتيح الأج��بية دائماً تقريباً لأن:
1. JOINs على المفاتيح الأجنبية تسبب فحوصات متسلسلة بدون فهارس
2. عمليات DELETE على الجداول الأم تتطلب فحص الجداول الفرعية
3. تصبح العمليات المتتالية أبطأ بشكل أسي على الجداول الكبيرة
تلاحظ القاعدة: الاستعلامات العرضية تستفيد من فهرسة المفاتيح الأجنبية بسبب تكاليف الفحص الأسي.
التدقيق الأمني
آمنAll 710 static findings are false positives. This is a documentation-only skill containing Postgres best practices in Markdown format. The flagged patterns (backticks, MD5 references, URLs, system queries) are all legitimate SQL examples, documentation links, and monitoring queries. No executable code, no data exfiltration, no malicious intent detected.
مشكلات متوسطة المخاطر (1)
مشكلات منخفضة المخاطر (4)
عوامل الخطر
⚡ يحتوي على سكربتات (1)
⚙️ الأوامر الخارجية (2)
🌐 الوصول إلى الشبكة (2)
درجة الجودة
ماذا يمكنك بناءه
استكشاف أخط��ء أداء الاستعلام
يستخدم المطور الذي يعاني من نقاط نهاية API بطيئة قواعد تحسين الاستعلام لإضافة فهارس وإعادة كتابة الاستعلامات لتحسين 100-1000 مرة.
مراجعة تصميم مخطط قاعدة البيانات
يراجع مهندس قواعد البيانات قواعد تصميم المخطط قبل إطلاق تطبيق SaaS متعدد المستأجرين لتجنب إعادة الهيكلة المكلفة.
تخطيط ترحيل Postgres
يخطط مهندس DevOps للترحيل من البنية الأحادية المستأجر إلى متعددة المستأجرين باستخدام إرشادات RLS وتجميع الاتصالات.
جرّب هذه الموجهات
لدي استعلام Postgres بطيء. ساعدني في تحسينه باستخدام أفضل الممارسات من مهارة supabase-postgres-best-practices. استعلامي: ```sql SELECT * FROM orders WHERE customer_id = 123 AND status = 'pending' ``` الجدول يحتوي على 10 ملايين صف. الاستعلام يستغرق 5 ثوانٍ.
راجع استراتيجية الفهرسة الخاصة بهذا المخطط باستخدام مهارة supabase-postgres-best-practices. ركز على الفهارس المركبة والفهارس الجزئية وفهرسة المفاتيح الأجنبية. المخطط: - جدول users (1 مليون صف) - جدول orders (5 ملايين صف، مفتاح أجنبي لـ users) - نمط الاستعلام: التصفية المتكررة عبر user_id + created_at + status
أقوم بتطبيق أمان المستوى الصف للبيانات متعددة المستأجرين باستخدام supabase-postgres-best-practices. ساعدني في تحسين سياسات RLS. السياسة الحالية: ```sql CREATE POLICY user_isolation ON documents USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id); ``` تدهور أداء الاستعلام 5 مرات بعد تفعيل RLS.
ساعدني في تكوين تجميع الاتصالات لتطبيق Node.js مع Supabase باستخدام supabase-postgres-best-practices. المتطلبات: - 1000 مستخدم متزامن - متوسط وقت الاستعلام: 50 مللي ثانية - استخدام PgBouncer - مواجهة أخطاء استنزاف الاتصالات قدم قيم تكوين محد��ة واشرح المفاضلات.
أفضل الممارسات
- أنشئ دائماً فهارس على أعمدة WHERE و JOIN و ORDER BY قبل النشر إلى الإنتاج
- استخدم ترقيم المؤشر مع الأعمدة المفهرسة بدلاً من OFFSET لمجموعات النتائج الكبيرة
- احتفظ بالمعاملات قصيرة (أقل من ثانية واحدة) وتجنب تفاعل المستخدم في منتصف المعاملة لمنع تضارب الأقفال
تجنب
- استخدام SELECT * على الجداول الكبيرة عند الحاجة فقط لأعمدة محددة (يسبب إدخال/إخراج غير ضروري ويمنع تحسين فهرس التغطية)
- تشغيل عبارات INSERT فردية داخل الحلقات بدلاً من تجميع الصفوف أو استخدام COPY
- إنشاء فهارس دون تحليل أنماط الاستعلام مع EXPLAIN ANALYZE (بعض الفهارس قد تضر أداء الكتابة دون مساعدة القراءة)