أداء متغير الجدول ضعيف عند الإدراج في إجراء SQL Server المخزن
-
10-07-2019 - |
سؤال
إننا نواجه مشكلات في الأداء باستخدام متغير جدول في إجراء مخزن.
وهنا ما يحدث في الواقع:
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 ساعة قبل أن قتله. ليس لدي حتى الآن لمعرفة حقيقة ما يجري. انتهى بي الأمر مضيفا ترتيب الاستعلام قوة تلميح وأنها بدأت إدخال أسرع.
والنقطة الرئيسية حول الجداول مؤقت أيضا هو أنه يمكنك وضع فهارس، الخ عليها في حين لم تتمكن مع المتغيرات الجدول.