English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

نقاش مختصر حول الجداول المؤقتة والجداول المشتقة في MySQL

عن الجداول المشتقة

عندما يحتوي الاستعلام الرئيسي على جدول مشتق، أو عندما يحتوي جملة SELECT على جملة UNION، أو عندما يحتوي جملة SELECT على جملة ORDER BY لمدخل معين (لجملة GROUP BY لمدخل آخر)، فإن MySQL يحتاج لإنشاء جدول مؤقت تلقائيًا لتخزين الناتج المؤقت للاستعلام، وتكون هذه الجداول المؤقتة مكتوبة تلقائيًا من قبل MySQL، وتُدار تلقائيًا، وتصبح جداول مؤقتة تُإنشأ تلقائيًا. بالنسبة للجداول المؤقتة التي تُإنشأ تلقائيًا، فإن أداء الجداول المؤقتة في الذاكرة أفضل، لذا يستخدم MySQL دائمًا الجداول المؤقتة في الذاكرة أولاً، وعندما يصبح حجم الجداول المؤقتة في الذاكرة كبيرًا، عندما يصل إلى مستوى معين، يتم تحويل الجداول المؤقتة في الذاكرة إلى جداول مؤقتة في الذاكرة الخارجية. أي أن الجداول المؤقتة في الذاكرة الخارجية هي امتداد لجداول المؤقتة في الذاكرة. يتم تحديد مستوى التحويل من الجداول المؤقتة في الذاكرة إلى الجداول المؤقتة في الذاكرة الخارجية من القيمة الأصغر بين متغيري max_heap_table_size و tmp_table_size.

تستخدم الجداول المشتقة عادةً في جملة FROM. مثلًا:

select * from (select * from table) as t;

عن الجداول المؤقتة

عند العمل على جداول كبيرة جدًا، قد تحتاج أحيانًا إلى تشغيل العديد من الاستعلامات للحصول على مجموعة صغيرة من البيانات، وليس تشغيل هذه الاستعلامات على الجدول بأكمله، بل جعل MySQL يجد كل مرة عددًا قليلًا من السجلات المطلوبة، وتحديد هذه السجلات في جدول مؤقت قد يكون أسرع، ثم تشغيل الاستعلامات على هذه الجداول.

إن إنشاء الجدول المؤقت سهل، اضف كلمة المفتاح TEMPORARY إلى جملة CREATE TABLE العادية:

إنشاء جدول مؤقت tmp_table (
الاسم VARCHAR(10) غير صالحة,
القيمة INTEGER غير صالحة
)

سيكون الجدول المؤقت موجودًا أثناء اتصالك بـ MySQL. عند انفصالك، سيقوم MySQL تلقائيًا بإزالة الجدول وتحرير المساحة المستخدمة. بالطبع، يمكنك أيضًا إزالة الجدول وتحرير المساحة أثناء الاتصال.

DROP TABLE tmp_table

إذا كانت توجد جدول يُدعى tmp_table في قاعدة البيانات عند إنشاء جدول مؤقت يُدعى tmp_table، سيكون من الضروري إخفاء (الإخفاء) جدول tmp_table غير المؤقت.

إذا قمت بتحديد أن الجدول المؤقت هو جدول HEAP، فإن MySQL يسمح أيضًا بإنشاءه في الذاكرة:

إنشاء جدول مؤقت tmp_table (
الاسم VARCHAR(10) غير صالحة,
القيمة INTEGER غير صالحة
) نوع = HEAP

بما أن جداول HEAP يتم تخزينها في الذاكرة، فإن الاستعلامات التي تقوم بتنفيذها عليها قد تكون أسرع من الجداول المؤقتة على القرص. ومع ذلك، هناك بعض الاختلافات بين جداول HEAP والجداول العادية، ولديها حدود خاصة بها. راجع دليل MySQL للحصول على مزيد من المعلومات.

كما تم اقتراحه سابقًا، يجب عليك اختبار الجداول المؤقتة لمعرفة ما إذا كانت حقًا أسرع في تنفيذ الاستعلامات على قاعدة بيانات كبيرة. قد لا تكون الجداول المؤقتة سريعة جدًا إذا كانت البيانات محورًا بشكل جيد.

1. بعد قطع الاتصال بـ mysql، يتم حذف بيانات الجداول المؤقتة تلقائيًا، ولكن هذا ينطبق فقط على الجداول المكونة من الجملة التالية:

تحديد الحقول:

إنشاء جدول مؤقت tmp_table (
الاسم VARCHAR(10) غير صالحة,
القيمة INTEGER غير صالحة
)

2) استيراد نتائج الاستعلام مباشرة إلى الجدول المؤقت

إنشاء جدول مؤقت tmp_table SELECT * FROM table_name

2.MySQL يسمح أيضًا بإنشاء جداول مؤقتة مباشرة في الذاكرة، لأنها موجودة في الذاكرة، فإن السرعة ستكون عالية، والنص مثل:

إنشاء جدول مؤقت tmp_table (
الاسم VARCHAR(10) غير صالحة,
القيمة INTEGER غير صالحة
) نوع = HEAP

3. من خلال التحليل السابق يمكن ملاحظة أن بيانات الجداول المؤقتة يتم حذفها تلقائيًا، عند قطع الاتصال يتم حذف البيانات تلقائيًا، ولكن من المستحيل أن تقوم بكل مرة بتنفيذ سكريبت SQL واتصال بالقاعدة البيانات (إذا كان الأمر كذلك، فإن المشكلة التي قلقتم بشأنها ستحدث، وإذا لم يكن الأمر كذلك، فإنه لا يوجد مشكلة)، لأن البيانات يتم حذفها فقط عند قطع اتصال القاعدة البيانات، وإذا قمت بتنفيذ عدة سكريpts SQL داخل اتصال قاعدة البيانات الواحد، فإن النظام لن يحذف بيانات الجداول المؤقتة تلقائيًا.

بيان: محتويات هذا المقال تم جمعها من الإنترنت، وتحمل حقوق الملكية للمالك الأصلي، وقد تم جمعها من قبل المستخدمين عبر الإنترنت بشكل متعاوني وتحميلها بشكل مستقل، ولا تملك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتويات بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا اكتشفت محتويات تتضمن حقوق النسخ، فنرجو إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) للإبلاغ، وتقديم الدليل على ذلك، وإذا تم التحقق من ذلك، سيتم حذف المحتويات المزعجة فورًا.

أعجبك ذلك