سؤال

في SQL Server 2005، قمنا بتعريف بعض UDT (أنواع البيانات المحددة من قبل المستخدم) على وجه الخصوص وهي SK (للمفتاح البديل).تم تعريفها على أنها 32 بت "int".وبالتالي كان الحجم 4 بايت.

في SQL Server 2008، يستخدم UDT لأنواع البيانات الصحيحة آلية تخزين مختلفة، اعتمادًا على الدقة:

يعرض التخزين الحد الأقصى لحجم التخزين لـ UDT.يختلف الحد الأقصى لأحجام التخزين بناءً على الدقة.

الدقة (الأرقام) ..... التخزين (بايت)

1 – 9........................5

10 – 19....................9

20 – 28...................13

29 – 38...................17

إحدى نتائج ذلك هي أن UDTs المبنية على كل من int و bigint سوف تشغل 9 بايت!ملحوظة:لا تزال أنواع البيانات int و bigint الأصلية تشغل 4 و 8 بايت على التوالي!

9 بايت تبدو ثقيلة جدًا بالنسبة لمفتاح UDT البديل!

هل يمكن لأي شخص أن يشرح سبب ذلك (على وجه الخصوص ما هو الأساس المنطقي للتصميم لذلك)؟كيف يحدث هذا التناقض بين UDT وأنواع البيانات الأصلية؟

هل هناك أي طرق بديلة بخلاف عدم استخدام UDTs؟

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

المحلول

معذرةً، لكن يبدو لي أنك أخطأت في فهم الأمر.تذكر أن "SELECT ليس معطلاً" ولن تقوم Microsoft بتعديل مثل هذا الجزء المهم من محركها دون الإعلان عنه بقوة بسبب مشاكل التحويل.

الجدول الذي تقتبس منه يأتي من عدد عشري و رقمي تخزين في MSDN, ، والتي هي في الأساس أكثر من كثافة العمليات

إذا كنت تستخدم اسمًا مستعارًا صارمًا، استخدام أنواع البيانات الخاصة يشير بقوة إلى أن أ كثافة العملياتيأخذ النوع القائم على أربعة بايتات وليس أكثر.إذا كنت تستخدم نوع CLR، فهناك تنانين أو المزيد من الحمل.

على أي حال، يمكنك التحقق من بصمة أنواع البيانات الخاصة بك من خلال النظر فيها sys.types

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