سؤال

هل يمكننا الحصول على قائمة بتقنيات التحسين الأساسية (أي شيء من النمذجة إلى الاستعلام ، وإنشاء فهارس ، ووجهات النظر إلى التحسين). سيكون من الجيد الحصول على قائمة من هذه ، تقنية واحدة لكل إجابة. بصفتي هواة ، سأجد أن هذا مفيد للغاية ، شكرًا.

ومن أجل عدم كونك غامضًا للغاية ، دعنا نقول أننا نستخدم DANTSTream DB مثل MySQL أو Oracle ، وأن DB سيحتوي على 500000-1M أو نحو ذلك عبر طاولات ~ 10 جدا معظم محركات التخزين النموذجية (على سبيل المثال: Innodb لـ MySQL). وبالطبع ، يتم تعريف الأساسيات مثل PKs وكذلك موانع FK.

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

المحلول

تعرف على الفهارس ، واستخدمها بشكل صحيح. بشكل عام*، اتبع هذه الإرشادات:

  • يجب أن يكون لكل جدول فهرس مجمعة
  • الحقول المستخدمة في المرشحات والأنواع هي مرشحين جيدين للفهرسة
  • أكثر انتقائي الحقول هي مرشحين أفضل للفهرسة
  • للحصول على أفضل أداء على الاستعلامات الحاسمة ، تصميم "تغطية الفهارس" لتلك الاستعلامات
  • تأكد من استخدام فهارسك بالفعل ، وإزالة تلك التي ليست
  • إذا كان لدى طاولتك 15 حقلًا ، وقمت بصنع 15 فهرسة ، ولكل منها حقل واحد فقط ، فأنت تفعل ذلك بشكل خاطئ :)

*هناك بعض الاستثناءات لهذه القواعد إذا كنت تعرف ما تفعله. تجربتي هي Microsoft SQL Server ، لكنني أفترض أن معظم هذه النصيحة ستظل تنطبق على RDMs مختلفة.

نصائح أخرى

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

عند الحديث عن تصميم قاعدة البيانات ، تحقق من تطبيع قاعدة البيانات ، على سبيل المثال مقالة ويكيبيديا: الأشكال العادية.

إذا كان لديك تصميم جيد وما زلت بحاجة إلى تحسين الأداء ، فحاول التثبيت.

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

بعض تحسينات الاستعلام/المخطط:

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

  • كن على دراية بالانضمام اليسرى. في كثير من الأحيان ، أجد أن مطوري SQL جدد سوف يتجاهلون المخطط في مكانه ويستخدمون الوصلات اليسرى حيث لا يكونون ضروريين حقًا. فمثلا:

Select
From Orders
    Left Join Customers
        On Customers.Id = Orders.CustomerId

إذا كان Orders.CustomerId عمودًا مطلوبًا ، فليس من الضروري استخدام انضمام يسار.

  • كن طالبًا من ميزات جديدة. في الوقت الحالي ، لا تدعم MySQL تعبيرات الطاولة المشتركة مما يعني أن بعض أنواع الاستعلامات مرهقة وربما أبطأ في الكتابة أكثر مما لو كانت مدعومة CTEs. ومع ذلك ، لن يكون هذا صحيحًا إلى الأبد. متابعة ميزات بناء الجملة الجديدة في MySQL والتي يمكن استخدامها لجعل الاستعلامات الموجودة أكثر كفاءة.

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

  • إذا كان ذلك ممكنًا ، ابحث عن طرق أرشفة البيانات إلى خادم OLAP أو تقارير. كلما كان بإمكانك عمل بيانات الإنتاج الأصغر ، كلما تم تشغيلها بشكل أسرع.

يعد التصميم الذي يصمم مشكلتك دائمًا بداية جيدة. يمكن أن يؤدي الإفراط في تعميم نموذج البيانات إلى مشاكل في الأداء. على سبيل المثال ، سمعت تقارير عن مشاريع تسعى جاهدة من أجل المرونة التي تستخدم RDBMS كمتجر "الاسم/القيمة" الغبي - وكان الأداء الناتج مروعًا.

بمجرد وضع التصميم الجيد ، استخدم الأدوات التي توفرها RDBMS لمساعدته على تحقيق أداء جيد. PKS FOLED PKS (بدون مركبات) ، ولكن مفاتيح الأعمال المركبة كفهرس مع قيود فريدة ، واستخدام أنواع البيانات المناسبة ، على سبيل المثال باستخدام أنواع رقمية مناسبة للقيم الرقمية بدلاً من char أو ما شابه. يجب أيضًا مراعاة السمات المادية للأجهزة التي يعمل عليها RDBMS ، لأن الجزء الأكبر من وقت الاستعلام غالبًا .

اعتمادًا على نسبة التحديث/الاستعلام ، يمكن أن تكون المشاهدات المتمدة/العرض المفهرسة مفيدة في تحسين الأداء للاستعلامات البطيئة قيد التشغيل. البديل الفقير هو استخدام المشغلات لاستدعاء إجراء يملأ الجدول بنتيجة وجهة نظر بطيئة ، متغيرة بشكل غير متكرر.

يعد تحسين الاستعلام نوعًا من الفن الأسود لأنه غالبًا ما يعتمد على قاعدة البيانات ، ولكن يتم تقديم بعض قواعد الإبهام هنا - تحسين SQL.

أخيرًا ، على الرغم من أنه ربما خارج النطاق المقصود لسؤالك ، استخدم طبقة جيدة للوصول إلى البيانات في التطبيق الخاص بك ، وتجنب إغراء لفة خاصة بك - هناك بالتأكيد تطبيقات مختبرة وأداء متاحة لجميع اللغات الرئيسية. يمكن أن يساعد استخدام التخزين المؤقت في طبقة الوصول إلى البيانات ، والطبقة الوسطى وطبقة التطبيق على تحسين الأداء بشكل كبير.

لا تستخدم أقل استعلام متى أمكن. استخدم "Join" ، وتجميع الجداول الخاصة بك بحيث يعطي استعلام واحد نتائجك.

مثال جيد هو تعديل شجرة مستعرضة الشجرة قبل الطلب (MPTT) للحصول على جميع الآباء عقدة الأشجار ، أمروا ، في استعلام واحد.

اتبع نهجًا كليًا للتحسين.

النظر في تأثير الأقراص البطيئة ، زمن انتقال الشبكة ، نقص الذاكرة ، وتحميل الخادم.

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