إذا كنت تريد فهم ما يقوم به الاستعلام والخطة التي تتبعها قاعدة البيانات، يمكنك استخدام الأمر EXPLAIN.
عند تنفيذ EXPLAIN، ستظهر لك معلومات عن:
قاعدة البيانات تحدد الطريقة الأسرع بناءً على إمكانياتها. في بعض الأحيان قد تقرر:
index)sequential scan)للحصول على معلومات أكثر تفصيلاً حول الأداء الفعلي، استخدم EXPLAIN ANALYZE:
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_name = 'John';
سيظهر لك:
في بعض الحالات، حتى لو كان لديك فهرس على عمود معين، قد تختار قاعدة البيانات عدم استخدامه. هذا يحدث عندما:
في المثال أعلاه، قررت قاعدة البيانات استخدام sequential scan بدلاً من الفهرس الموجود على العمود customer_name.
إذا كان هناك فهرس، ستراه في النتائج باسم index scan.
عندما تريد بدء معاملة في PostgreSQL، استخدم:
BEGIN;
بعد BEGIN، أي عملية تقوم بها (مثل INSERT أو UPDATE) لن تصبح نهائية حتى تقوم بأحد الأمرين:
COMMIT; - لتأكيد جميع التغييراتROLLBACK; - للعودة للحالة الأصلية وإلغاء جميع التغييراتلنقل أنك تريد إضافة حساب جديد:
BEGIN;
INSERT INTO accounts (name) VALUES ('John');
الآن إذا أجريت SELECT:
SELECT * FROM accounts;
ستجد أن 'John' موجود في النتائج. لكن هذا لا يعني أن التغيير تم تأكيده بعد!
لتأكيد التغيير:
COMMIT;
إذا أدركت أنك قمت بخطأ، يمكنك استخدام ROLLBACK:
BEGIN;
INSERT INTO accounts (name) VALUES ('John');
ROLLBACK;
الآن جميع التغييرات سيتم إلغاؤها والبيانات ستعود لحالتها الأصلية.
لديك جدول users فيه عمود role:
BEGIN;
UPDATE users SET role = 'admin' WHERE username = 'bob';
الآن يمكنك التحقق من أن التحديث صحيح قبل تأكيده:
SELECT * FROM users;
ستلاحظ أن bob أصبح admin، بينما الباقي لم يتغير.
إذا كل شيء يبدو صحيحاً:
COMMIT;
إذا لاحظت أن هناك خطأ:
BEGIN;
UPDATE users SET role = 'admin' WHERE username = 'bob';
يمكنك التراجع بدلاً من التأكيد:
ROLLBACK;
الآن جميع البيانات ستعود لحالتها الأصلية. بدون معاملة، ما تحدثه سيكون نهائياً مباشرة.
الفهارس تساعد في تسريع الاستعلامات. عندما تحتاج لاستعلام معقد، يفضل أن تكون البيانات مفهرسة.
SELECT * FROM orders WHERE customer_name = 'John';
إذا لم يكن هناك فهرس على customer_name، قد تواجه استعلامات بطيئة على جداول كبيرة.
اشترك في النشرة البريدية
دروس جديدة، مقالات، وأدوات مباشرة لبريدك.