سؤال

ما هو أسرع في SQL Server 2005/2008, إجراء مخزن أو الرأي ؟

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

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

المحلول

الإجراءات المخزنة (واص) و SQL وجهات نظر مختلفة "الوحوش" كما ذكر عدة مرات في هذا المنصب.

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

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

وبصرف النظر عن هذه الاعتبارات ، واص هي أكثر تنوعا يسمح مجموعة واسعة من التحقيقات والإجراءات من آراء.

نصائح أخرى

للأسف هم ليسوا نفس النوع من الوحش.

إجراء مخزن مجموعة من T-SQL البيانات ، ويمكن إرجاع البيانات.ويمكن أن تؤدي جميع أنواع المنطق, و لا تعود بالضرورة البيانات في resultset.

يتم تمثيل البيانات.انها تستخدم في الغالب المجردة من واحد أو أكثر من الجداول الأساسية ينضم.انها دائما resultset من صفر واحد أو العديد من الصفوف.

وأظن سؤالك أكثر على غرار:

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

هذا ليس حقا مسؤولة السؤال في هذا الجواب سوف يعقد صحيحا في كل الحالات.ومع ذلك ، وكما إجابة عامة ل SQL Server معينة implementaion...

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

الرأي هو الأساس حفظ SQL.

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

مرجع هذه الروابط الوثائق الداعمة جوابي.

http://www.sql-server-performance.com/tips/stored_procedures_p1.aspx

http://msdn.microsoft.com/en-us/library/ms998577.aspx

أيضا, إذا كنت تبحث عن جميع الطرق لتحسين الأداء على SQL Server الثاني الرابط أعلاه هو مكان جيد للبدء.

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

باختصار ، بناء على تجربتي في بعض الاستعلامات المعقدة, تخزين الإجراء يعطي أداء أفضل من وظيفة.

ولكن لا يمكنك استخدام نتائج الإجراء المخزن في تحديد أو الانضمام إلى الاستعلامات.

إذا كنت لا ترغب في استخدام مجموعة النتائج في بحث آخر ، من الأفضل استخدام SP.

و بقية التفاصيل و الاختلافات التي ذكرها الناس في هذا المنتدى وغيره.

الإجراءات المخزنة و وجهات نظر مختلفة لها أغراض مختلفة.أنظر الآراء المعلبة الاستعلامات.أنظر الإجراءات المخزنة كما رمز وحدات.

على سبيل المثال لنفترض أن لديك جدول يسمى tblEmployees مع هذه عمودين (بين أمور أخرى): DateOfBirth و MaleFemale.

عرض يسمى viewEmployeesMale الذي يرشح من الذكور فقط الموظفين يمكن أن تكون مفيدة جدا.عرض يسمى viewEmployeesFemale هو أيضا مفيدة جدا.كل من هذه الآراء هي النفس التي تصف وبديهية جدا.

الآن, دعونا نقول أنك تحتاج إلى إعداد قائمة جميع الموظفين الذكور الذين تتراوح أعمارهم بين 25 و 30.أنا أميل إلى إنشاء إجراء مخزن لإنتاج هذه النتيجة.في حين أنها بالتأكيد يمكن أن يبنى كما عرض في رأيي إجراء مخزن هو أكثر ملاءمة للتعامل مع هذا.تاريخ التلاعب خاصة حيث بالقيم الخالية هي عامل يمكن أن تصبح صعبة جدا.

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

أعتقد أن ما أقوله هو بدلا من sp مقابل وجهات النظر ، أعتقد sp وجهات النظر :)

بضعة اعتبارات أخرى:في حين أن الأداء بين SP و هي أساسا نفس (بالنظر إلى أنهم يؤدون نفس حدد), SP يتيح لك المزيد من المرونة في نفس الاستعلام.

  • SP سوف تدعم الطلب نتيجة مجموعة ؛ أي بما في ذلك ترتيب حسب البيان.لا يمكنك القيام بذلك في الرأي.
  • SP بالكامل جمعت ويتطلب فقط exec إلى الاحتجاج بها.رأي لا يزال يتطلب SELECT * FROM view الاحتجاج ؛ أي حدد على تجميع حدد في الرأي.

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

لدي وجهة نظر في قاعدة بيانات "أ" الذي ينضم إلى 5 الجداول في قاعدة بيانات منفصلة (db "ب").إذا لم نعلق على ديسيبل "أ" في SSMS و حدد * من نظر ، يلزم >3 دقائق للعودة 250000 الصفوف.إذا كنت تأخذ select من تصميم صفحة عرض وتنفيذه مباشرة في SSMS ، فإنه يأخذ < 25 ثانية.وضع نفسه حدد البيان إلى الإجراء المخزن يعطي نفس الأداء عندما كنت تنفيذ هذا الإجراء.

دون إبداء أي ملاحظات على الأداء المطلق (db "ب" فأس قاعدة البيانات التي لا يسمح للمس!), أنا ما زلت مقتنع تماما أنه في هذه الحالة باستخدام SP هو أمر من حجم أسرع من استخدام بغية استرداد البيانات نفسها ، وهذا ينطبق على غيرها من الآراء في هذه القضية بالذات.

لا أعتقد إنها علاقة وخلق اتصال أخرى db إلا باستخدام عرض ذلك بطريقة أو بأخرى لا يمكن أبدا ذاكرة التخزين المؤقت الاتصال في حين حدد لا, لأنني يمكن التبديل بين 2 يختار في نفس SSMS نافذة مرارا و أداء كل استعلام ثابتا.أيضا, إذا كنت على اتصال مباشرة إلى db "ب" و تشغيل البرنامج اختر من دون dbname.dbo....الحكام يستغرق نفس الوقت.

أي أفكار أي شخص ؟

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