سؤال

يتم تقسيم بيانات datamart الخاصة بالمستودع عبر 3 قواعد بيانات على نفس الخادم.هذا هو مشروع إثبات المفهوم الذي يحتوي على ثلاثة مقتطفات تم تحميلها في قواعد بيانات فردية.

أثناء السحب إلى المكعب، أفعل هذا بشكل أساسي:

SELECT * FROM DB1.dbo.Fact_Pres
UNION
SELECT * FROM DB2.dbo.Fact_Pres
UNION
SELECT * FROM DB3.dbo.Fact_Pres

هل يجب عليّ بالفعل دمج البيانات في جدول واحد؟هل سيؤدي ذلك إلى جعل عملية المعالجة أسرع؟

ليس لدي أي مشاكل مع مساحة القرص - أريد تنفيذ الحل الأفضل.

في كلتا الحالتين، هل يمكنك مساعدتي في فهم لماذا تعتبر الطريقة التي تقترحها هي الأمثل؟

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

المحلول

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

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

التوصيات هي من مشروع مايكروسوفت الحقيقي.

ضع في اعتبارك أيضًا أنه لا يمكن استخدام المفتاح الخارجي عبر قواعد البيانات.

نصائح أخرى

والنظر المكونة للدولة الاتحادية الجدول الخاص بك باستخدام أول تقسيم الطبقة SQL ملقم (على العكس من فعل ذلك بنفسك). إذا كنت دائما تحديد كل نقطة بيانات، ثم ربما نعم، وسحب قبالة أقراص متعددة بشكل أسرع.

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

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

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

وفيما يتعلق تعليقك:

وتكلفة أداء ليست ضخمة، ولكن اتحاد يؤدي دمج الانضمام، الذي يجمع قليلا اوف النفقات العامة.

وبالإضافة إلى ذلك، هل أنت متأكد من أنك تستخدم UNION بشكل صحيح؟ سوف UNION القضاء على قيم مكررة. ربما ما كنت حقا تريد القيام به هو UNION ALL؟

وA UNION يقوم أساسا select distinct بحيث يمكن إزالة سجلات مكررة. هذا سوف (يحتمل) يضعف الأداء من تلقاء نفسه. هل يمكن تصحيح هذا عن طريق تغيير لUNION ALL.

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

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