it-swarm.asia

NULL أو لا NULL بشكل افتراضي؟

في MySQL ، هل من الأفضل دائمًا السماح بالقيم الخالية إلا إذا كنت تعلم أن الحقل مطلوب ، أو استخدم دائمًا Not Null إلا إذا كنت تعرف أن الحقل سيحتوي على قيم خالية؟ أم لا يهم؟

أعلم في بعض DBMSs أنهم يقولون لاستخدام Not Null قدر الإمكان لأن السماح بالقيم الخالية يتطلب بتًا إضافيًا (أو بايت؟) لكل سجل لتخزين الحالة الخالية.

41
BenV

في معظم قواعد البيانات ، سيكون عمود NOT NULL أكثر كفاءة من حيث البيانات المخزنة للسبب الذي تحدده ، كما أنه أكثر كفاءة في الاستعلام والفهرسة - لذلك ما لم ترغب في السماح بالقيم الخالية في عمود ، فيجب عليك عدم السماح بها صراحة .

سيكون هناك تأثير طفيف على الأداء ، حيث من المحتمل أن يتم التحقق من القيود الإضافية NOT NULL لكل صف تؤثر عليه مع أي INSERT أو UPDATE ولكن نظرًا لأن معظم قواعد البيانات تكون نسبية في ضوء الكتابة وثقيلة في القراءة ، فهذا على الأرجح لا تقلق (من غير المحتمل أن يكون الوقت الإضافي القليل الذي يتم استغراقه ملحوظًا على الإطلاق على أي حال لأنه عملية مرتبطة بوحدة المعالجة المركزية حيث ستكون بقية عملية الإدخال/التحديث مرتبطة بـ IO وبالتالي عنق الزجاجة أكثر أهمية بكثير) و إنه يمنحك بعض التحقق من البيانات "المجانية" بحيث لا يمكن لشفرتك (أو رمز الأشخاص الآخرين) أن تضع بالصدفة NULLs حيث لا يتوقعها رمز آخر ، وبالتالي قد تعطي نتائج غير صحيحة في وجودها.

تحرير: كما يشير بيتر في تعليقه ، فإن ما سبق هو عمومية وقد لا ينطبق على الكل DMBSs ، على الرغم من أنني متأكد تمامًا أنه ينطبق على mysql و mssql. قد تتضمن المضاعفات الأخرى في المنطقة ميزات مثل الجداول المتناثرة (كما تم تنفيذها MSSQL 2008 على سبيل المثال) والتي ستغير ديناميكيات أداء الأعمدة (لا) الخالية.

25
David Spillett

يجب عليك السماح لمتطلبات تصميم المخطط والتطبيق بتوجيه هذا القرار. ربما لا تكون اختلافات الأداء ملحوظة في أي من الحالتين في معظم الحالات.

9
Peter Eisentraut