أداء متغير الجدول ضعيف عند الإدراج في إجراء SQL Server المخزن

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

سؤال

إننا نواجه مشكلات في الأداء باستخدام متغير جدول في إجراء مخزن.

وهنا ما يحدث في الواقع:

DECLARE @tblTemp TABLE(iId_company INT)

INSERT INTO @tblTemp(iId_company)
  SELECT id FROM .....

يقوم SELECT بإرجاع 138 نتيجة، لكن الإدخال في متغير TABLE يستغرق دقيقة واحدة و15 دقيقة، ولكن عندما أستخدم جدولًا مؤقتًا بنفس SELECT، فإن woops يستغرق 0 ثانية:

CREATE TABLE #temp (iId_company INT)

INSERT INTO #temp(iId_company)
  SELECT id FROM ...

ما الذي يمكن أن يسبب هذا السلوك؟

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

المحلول

استخدم جدولًا مؤقتًا.سترى أداء أفضل بكثير.

التفسير التفصيلي للسبب وراء ذلك يتجاوز نطاق السؤال الأولي مع تلخيص:

  • تم تحسين متغير الجدول لصف واحد ، بواسطة SQL Server أييفترض أنه سيتم إرجاع صف واحد.
  • متغير الجدول لا يخلق إحصائيات.

جوجل الجدول المؤقت مقابل.متغير الجدول للحصول على ثروة من الموارد والمناقشات.إذا كنت بحاجة بعد ذلك إلى مساعدة محددة، أرسل لي بريدًا إلكترونيًا أو اتصل بي على Twitter.

نصائح أخرى

وعموما، لمجموعات صغيرة من البيانات، يجب أن يكون متغير جدول أسرع من الجدول المؤقت. لمجموعات كبيرة من البيانات، وأداء تسقط بسبب المتغيرات الجدول لا تدعم التوازي (انظر <لأ href = "http://sqlblog.com/blogs/peter_larsson/archive/2009/10/15/performance-consideration-when التي تستخدم وواحد في الجدول variable.aspx "يختلط =" نوفولو noreferrer "> هذا المنصب ).

وقال مع ذلك، أنا لم تشهد، أو وجدت تجربة مع مثل مجموعة صغيرة من البيانات يكون أبطأ لمتغير الجدول مقابل جدول مؤقت.

وليس ذلك يجب أن يهم ولكن ماذا بك حدد تبدو وكأنها؟ كان لي مشكلة في SQL Server 2005 حيث ركض بلدي حدد على نفسه بسرعة نسبيا لما الاستعلام بلدي كان يقوم به القول 5 دقائق للعودة جميع البيانات عبر السلك حوالي 150،000 الصفوف. ولكن عندما حاولت إدراج حدد ذلك نفسه في جدول مؤقت أو الجدول متغير ركض بيان لأكثر من 1 ساعة قبل أن قتله. ليس لدي حتى الآن لمعرفة حقيقة ما يجري. انتهى بي الأمر مضيفا ترتيب الاستعلام قوة تلميح وأنها بدأت إدخال أسرع.

والنقطة الرئيسية حول الجداول مؤقت أيضا هو أنه يمكنك وضع فهارس، الخ عليها في حين لم تتمكن مع المتغيرات الجدول.

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