المشاركات : 721
المواضيع 22
الإنتساب : Oct 2012
السمعة :
193
الشكر: 1015
تم شكره 1881 مرات في 707 مشاركات
02-06-18, 07:49 AM
(آخر تعديل لهذه المشاركة : 02-06-18, 07:55 AM {2} بواسطة عبدالله الدوسري.)
وعليكم السلام ورحمة الله وبركاته
ماهي المساؤي او المشاكل التي ممكن ان تحدث
لو كان السؤال ما هو الفرق في قوة الأداء بين الطريقتين لكن أفضل
طبعاً الربط من خلال حقل رقمي INT أفضل بـ 10 مراحل
إذا تم الربط بواسطة حق نصي , سيتم عمل ( index page ) فهرس بهذا الحقل , مثلاً الحقل النصي يحتوي على 20 حرف هذا يعني الضعف في المساحة يعني يساوي 40 bytes لكل سجل
الحقل الرقمي INT دائماً وأبداً سيأخذ حجم 4 bytes
بينما الحقل النصي , مثلاً (nvarchar(128 سيأخذ 254 bytes الضعف.
كل هذة البيانات سيقوم محرك قاعدة البيانات أين كان SQL Server أو Access بإدارتها.
وإدارة هذة البيانات طبعاً حجم البيانات عامل مؤثر في سرعة معالجتها ,
طبعاً معالجة 4 bytes أسرع بكثير جداً من معالجة 254 bytes.
وأيضاً المقارنة بين 4 bytes وبين 4 bytes أخرى ,,, أسرع بكثير من المقارنة بين 254 bytes وبين 254 bytes أخرى.
عند إجراء الإستعلامات , المقارنة بين رقمين من نوع INT فعال جداً وسريع.
بينما المقارنة بين حقلين نصيين سيكلف الكثير من الوقت والكثير من الإجراءات على الـ CPU ( وحدة المعالجة المركزية ) , وذلك لأن النصوص تعتمد على الـ ( collations ) , لا أعرف كيف أشرح الـ collations ولكن هي مثل أنواع اللغات أو تعريف هيئة الحروف والرموز , يمكنك أن تفهمها على أنها خريطة تبين السياسة المتبعة من الحروف , عندك الإنجليزي والعربي و الصيني والياباني وجميع لغات العالم تقريباً لها collations خاص , أيظاً حالت الأحرف وحساسيتها واللهجة ( يؤثر في قوت الأداء بشكل عام ).
يعني لو قمت ربط جدول بآخر من خلال حقل نصي ( سيكون مفهرس , وفهرسة الحقول النصية ستأخذ حجم أكبر )
لو قمت بعمل إستعلام عن سجل إبن بواسطة الحقل النصي للأب ، سيتم مقارنة الحقل النصي في جميع السجلات في الجدول الإبن والتي تطابق الحقل النصي في السجل الأب.
دائماً نوع البيانات INT ( يفوز ) في :
1 - Duration : أقل في مدة الإجراء
2 - CPU : أقل إستخدام لوحدة المعالجة المركزية ,
( في قواعد البيانات التي عليها حركة عمل كثيرة ومزدحمة بالإتصالات والإجراءات ) سيكون عامل مهم أن تفكر في التصميم الصحيح حتى لا يكون الـ CPU مشغول كثيراً في معالجة الإجراءات , لأن أي إستعلام يأخذ حيز من قدرة الـ CPU فإذا كانت هناك إستعلامات كثيرة تنفذ في نفس الوقت , الـ CPU سيتأخر في تنفيذ الإستعلامات إذا لم يتم تصميمها بالشكل المناسب, سيكون هناك طابور من الإستعلامات يقوم الـ CPU بتنفيذها واحد تلو الآخر.
في الجداول الضخمة والتي تعتبر فعلاً كبيرة جداً , هنا يتم إعتبار INT الخيار الأفضل ,
لكن في الجداول الصيغرة والمتوسطة , لن يكون هناك فرق كبير , عندها يمكنك أن لا تفكر في قوة الأداء والذهاب إلى ما يسهل عليك العمل بدون التفكير في قوة الأداء
عن نفسي أستخدم INT دائماً , حالات نادرة استخدم CHAR كمفتاح أساسي أو أن يكون مفهرس , بشرط لا يكون طويل , ثلاث أحرف مثلاً .
المشاركات : 852
المواضيع 9
الإنتساب : Oct 2015
السمعة :
131
الشكر: 2219
تم شكره 1681 مرات في 745 مشاركات
Collations في قواعد البيانات تعني شيء متعلق بالترميز
مثلا قاعدة البيانات عندما يكون فيها حقل nvarchar يكون ترميزه unicode ويقبل كل حروف unicode
عكس حقل varchar كذلك في حجم البيانات المخزنة فيه الاخير اقل من الاول
الصحيح في البرامج العربية ان تحدد collation قاعدة البيانات عند انسائها الى arabic collation
بالتالي تقبل الحروف العربية والانجليزية
الغريب ان تكون القاعدة لها collation لاتيني ويجبر المطور على ارفاق حرف N عند التعامل مع البيانات
بالنسبة للوصول السريع الى البيانات فكما تفضل اخي عبدالله ان يكون الفهرس رقمي
ايضا مفهوم الكائنات objects يساعد على سرعة الوصول لكل خصائص الكائن بسرعة
هذا مفهوم البرمجة الكائنية التوجه OOP
أخي viv اعتقد انك تضيع وقتك قبل اللجوء الى لغة Linq