سؤال

كيف يخزن MySQL حقل فارغة؟ هل يمكنني افتراض أن النمط التالي يمثل أحجام التخزين المعقولة:

1،2،4،8،16،32،62،628،255 (ماكس)

توضيح عبر المثال. دعنا نقول أن لدي حقل فارغة من 20 حرفا. هل MySQL عند إنشاء هذا الحقل، في الأساس احتياطي مساحة لمدة 32 بايت (غير متأكد إذا كانت بايت أم لا) ولكن السماح فقط ب 20 لإدخالها؟

أعتقد أنني قلقة من تحسين مساحة القرص لطاولة ضخمة.

هل كانت مفيدة؟

المحلول

للإجابة على السؤال، على القرص MySQL يستخدم 1 + الحجم المستخدم في الحقل لتخزين البيانات (حتى إذا تم إعلان العمود varchar (45)، وكان الحقل "foobar" سيستخدم 7 بايت على القرص، ما لم يكن بالطبع معك حيث تستخدم مجموعة أحرف متعددة بايت، حيث سيتم استخدام 14 بايت). ومع ذلك، ومع ذلك تعلن أعمدةك، فلن تحدث فرقا في نهاية التخزين (ذكرت أنك قلق بشأن تحسين الأقراص للحصول على طاولة ضخمة). ومع ذلك، فإنه يحدث اختلافا في الاستفسارات، حيث يتم تحويل Varchar's إلى Char's عندما يقوم MySQL بجدول مؤقت (فرز، ترتيب، إلخ) والمزيد من السجلات التي يمكنك تنسيقها في صفحة واحدة، والذاكرة الأقل وأسرع يكون.

نصائح أخرى

يخزن MySQL حقل Varchar كتسجيل مائل متغير، مع بادئة بايت واحدة أو بايت للإشارة إلى حجم السجل.

إن وجود نمط من أحجام التخزين لا يحدث فرقا في كيفية توظيف MySQL عند التعامل مع تخزين سجل طول المتغير. سيتم تحديد الطول المحدد في إعلان Varchar (x) ببساطة الحد الأقصى لطول البيانات التي يمكن تخزينها. في الأساس، A varchar (16) لا يوجد قرص مختلف من varchar (128).

هذه الصفحة دليل لديه شرح أكثر تفصيلا.

تحرير: فيما يتعلق بسؤالك المحدث، لا يزال الجواب هو نفسه. سيستخدم حقل Varchar فقط أكبر مساحة على القرص مثل البيانات التي تخزن فيها (بالإضافة إلى نفقات واحدة أو اثنين من البايت). لذلك لا يهم إذا كان لديك varchar (16) أو varchar (128)، إذا قمت بتخزين سلسلة من 10 أحرف في ذلك، فستستخدم فقط 10 بايت (زائد 1 أو 2) من مساحة القرص وبعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top