SQL خادم 2005 مشاهدة مباراة متحقق مشاهدة مباراة إجراء مخزن

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

سؤال

وإذا كان لدي جدول يحتوي على عشرات الآلاف من سجلات حسابات مواقع متعددة.

هل هناك فرق السرعة إذا كنت الاستعلام عن الرأي القائل بأن يختار كل الحسابات لموقع معين وإجراء مخزن مع بيان SQL نفسه؟

وتحرير: جريت عبر هذا متحقق عرض. يبدو مثل هذا من شأنه دائما أن تستخدم.

ومتى تريد استخدام إجراء مخزن، والرأي، وتتحقق الرأي؟ ما إيجابيات وسلبيات هل تريد أن نأخذ في الاعتبار عند اتخاذ هذا القرار؟

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

المحلول

والجواب باختصار: "الامر يعتمد"

وأطول الجواب: "ذلك يعتمد على شكل الاستعلام"

وكما هو الحال مع أي سؤال حول الأداء في SQL Server (ما هو أفضل: س مقابل ص)، وليس هناك إجابة صحيحة. في حالة وجهات النظر مقابل sprocs، وليس هناك طريقة للتنبؤ موثوق والتي سوف (إن وجدت) يكون أسرع، وباختصار من التنميط الاستعلام.

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

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

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

والخلاصة: فهم ما هو عليه تريد تحقيقه. ثم الشخصي، لحن، قرص، وتكرار حتى راض.

نصائح أخرى

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

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

ونعم ولا.

وجهة نظر هو تعريف الاستعلام الذي تم استبداله في الأساس في نفس المكان عند استخدامها، ويحصل على تجميع في الاستعلام تشير وجهة النظر. وهذا يعني أن التنفيذ الفعلي يعتمد على الاستعلام <م> تشير وجهة النظر . إذا كان الاستعلام هو SELECT * FROM view إلى الأمام مباشرة ثم سيكون هذا الى حد كبير بالضبط خطة تنفيذ نفس الإجراء ما يعادلها. ولكن إذا تم SELECT onefield FROM view الاستعلام الاستعلام <م> إلى حد كبير مختلفة. لا يوجد أي إجراء مكافئ، وهذا قد الاستعلام أداء أفضل بشكل ملحوظ بسبب قائمة إسقاط مخفضة.

وهناك أيضا diferences الاستخدام ضخمة. إجراء مخزن لا يمكن تنفيذها. يمكن اختيار وجهة نظر من و استخدامها مع بيانات أخرى متعددة مثل ينضم، الاستعلامات الفرعية وما شابه ذلك.

ونظرا لمرونة أفضل بكثير من وجهات النظر، ما لم يوجد عامل آخر يلعب دورا ثم إجراء معنى إلا إذا كان لديك المعلمات، منذ وجهات النظر لا يمكن أن يكون المعلمات.

ووanserws لهذا <وأ href = "https://stackoverflow.com/questions/1335722/how-it-is-possible-to-create-clustered-index-on-a-view/1335926" عنوان = "بوست"> المشاركة سيوفر أساسية مفيدة على فهرستها (تتحقق) وجهات النظر في SQL Server.

ورأيت أيضا كل واحد أن يكون أسرع من الآخر، وهذا يتوقف على السياق.

والقاعدة العامة التي تقضي بجعل أتابع هو: إذا كان عرض له WHERE معقدة، تعتمد على وجهات النظر الأخرى المعقدة معتدلة أو هو نتيجة لUNION [ALL]، ثم من شبه المؤكد أن SQL S. لن تكون قادرة على بشكل صحيح نشر WHERE الشروط المطبقة على وجهة النظر على طول الطريق إلى الجداول الفردية، وذلك في نقطة واحدة عليك البدء في الحصول على المسح الجدول (إلا إذا كان عرض تتحقق) أو خطط التنفيذ الخاصة بك وسوف يكون أكثر تعقيدا بكثير (وبطيئة) من ما يمكن أن يكون.

في هذه الحالات، أفضل الذهاب لبروك. وكما قال آخرون، الشخصية دائما!

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