هو الحقل BIT أسرع من حقل كثافة العمليات في SQL Server؟

StackOverflow https://stackoverflow.com/questions/866209

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي جدول مع بعض الحقول أن القيمة ستكون 1 0. وهذا الجداول يكون العمل الإضافي كبير للغاية. هل هو جيد لاستخدام نوع البيانات بت أو لها الأفضل استخدام نوع مختلف عن الأداء؟ طبعا كل المجالات يجب فهرستها.

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

المحلول

ورسميا قليلا سوف يكون أسرع، وخاصة إذا كنت لا تسمح بالقيم الخالية. في واقع الامر انه قد لا يهم، حتى في الأعراف كبيرة. ولكن إذا كانت قيمة ستكون فقط 0 أو 1، لماذا لا تستخدم بعض الشيء؟ يبدو وكأنه أفضل وسيلة لضمان أن قيمة لن يحصل مليئة الاشياء غير صالح، مثل 2 أو -1.

نصائح أخرى

وأنا لا أستطيع أن أعطيك أي احصائيات على الأداء، ومع ذلك، يجب عليك دائما استخدام النوع الذي هو أفضل ممثل البيانات الخاصة بك. إذا كان كل ما نريده هو 1-0 ثم على الاطلاق يجب عليك استخدام حقل بت.

لمزيد من المعلومات يمكنك ان تعطي قاعدة البيانات الخاصة بك على الأرجح هو الحصول على انها "تخمينات" اليمين.

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

إذا أن نقول بكل ثقة 100٪ أن الخيارين لهذا العمود لن تتغير ثم بكل الوسائل تستخدم بعض الشيء. ولكن إذا كنت تستطيع رؤية قيمة ثالثة ظهرت في المستقبل يمكن أن تجعل الحياة أسهل قليلا عندما يأتي ذلك اليوم لاستخدام tinyint.

ومجرد التفكير، لكنني لست متأكدا كم جيد مؤشر ستفعل لكم على هذا العمود سواء، إلا إذا كنت ترى الغالبية العظمى من الصفوف تسير على جانب واحد أو آخر. في 50/50 توزيع تقريبا قد كنت تأخذ في الواقع أكثر من ضربة الحفاظ على مؤشر حتى الآن من مكاسب ذلك كنت انظر في الاستعلام عن الجدول.

وهذا يعتمد.

إذا كنت ترغب في زيادة سرعة يختار، واستخدام الباحث (tinyint لتوفير مساحة)، لأن الشيء في الفقرة حيث أبطأ ثم كثافة (وليس بشكل كبير، ولكن كل التهم ميلي ثانية واحدة). وتأكد أيضا العمود غير فارغة الذي يسرع أيضا الامور. هو الرابط أدناه لاختبار الأداء الفعلي، والذي أنصح تشغيلها في قاعدة البيانات الخاصة بك وأيضا تمديده باستخدام ليس بلا قيم، والفهارس واستخدام أعمدة متعددة في آن واحد. في المنزل حتى حاولت مقارنة باستخدام أعمدة قليلا متعددة مقابل الأعمدة tinyint متعددة وكانت الأعمدة tinyint أسرع (select count(*) where A=0 and B=0 and C=0). اعتقدت أن SQL Server (2014) من شأنه تحسين عن طريق القيام مقارنة واحد فقط باستخدام قناع بت، لذلك يجب قبل ثلاث مرات أسرع ولكن لم يكن هذا هو الحال. إذا كنت تستخدم الأرقام القياسية، وسوف تحتاج إلى أكثر من 5000000 الصفوف (كما تستخدم في الاختبار) لاحظت أي فرق (والذي لم يكن لديك الصبر لتفعل منذ ملء الجدول مع الملايين متعددة الصفوف سيستغرق الأعمار على الجهاز الخاص بي).

<وأ href = "https://www.mssqltips.com/sqlservertip/4137/sql-server-performance-test-for-bit-data-type-in-a-where-clause/" يختلط = " noreferrer نوفولو "> https://www.mssqltips.com/sqlservertip/4137/sql-server-performance-test-for-bit-data-type-in-a-where-clause/

إذا كنت ترغب في توفير مساحة، واستخدام بعض الشيء، منذ 8 منهم يمكن ocuppy بايت واحد في حين أن 8 tinyints سوف ocupy 8 بايت. التي هي في حدود 7 ميغابايت المحفوظة على كل مليون من الصفوف.

والاختلافات بين هاتين الحالتين هي في الأساس negligable ومنذ استخدام بعض الشيء لديه رأسا على عقب من يشير إلى أن العمود يمثل مجرد العلم، وأود أن أوصي باستخدام بعض الشيء.

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