سؤال

أنا أقوم بتشغيل الأمر SAS التالي:

Proc SQL;
Delete From Server003.CustomerList;
Quit;

الذي يستغرق أكثر من 8 دقائق ... عندما يستغرق الأمر بضع ثوان فقط لقراءة هذا الملف. ما يمكن أن يكون السبب حذف يستغرق وقتا طويلا وما الذي يمكنني فعله لجعله يذهب بشكل أسرع؟

(ليس لدي حق الوصول لإفلات الجدول، لذلك يمكنني فقط حذف جميع الصفوف)

شكرا،

دان

تحرير: أنا أيضا على ما يبدو لا يمكن اقتطاع الجداول.

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

المحلول

هذا ليس بانتظام SQL. SAS 'PROC SQL لا يدعم بيان اقتطاع. من الناحية المثالية، تريد معرفة ما يجري مع أداء delete from; ؛ ولكن إذا كانت ما تحتاجه حقا هو وظيفة اقتطاع، فيمكنك دائما استخدام SAS النقي وليس الفوضى مع SQL على الإطلاق.

data Server003.CustomerList;
set Server003.CustomerList (obs=0);
run;

هذا يعمل بشكل فعال ويعمل مثل Truncate سيكون. يحافظ على هيكل DataSet / Table لكنه فشل في ملءه بالبيانات (بسبب OBS = الخيار).

نصائح أخرى

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

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

قد يكون أبطأ لأن يكتب القرص أبطأ عادة من القراءات.

كما هو الحال حولها دون إسقاط / اقتطاع، سؤال جيد! :)

حاول إضافة هذا إلى LIBNAME بيان:

DIRECT_EXE=DELETE 

وفق SAS / Access (R) 9.2 للحصول على قواعد البيانات العلائقية: المرجع,

يعمل الأداء بشكل كبير باستخدام Direct_EXE =، نظرا لأن عبارة SQL Delete يتم تمريرها مباشرة إلى DBMS، بدلا من SAS قراءة مجموعة النتائج بأكملها وحذف صف واحد في وقت واحد.

يمكنك أيضا النظر في أنيقة:

بروك SQL؛ إنشاء جدول libname.tablename مثل libname.tablename؛ استقال؛

سأنتج طاولة جديدة بنفس الاسم وبيانات التعريف نفسها من طاولتك السابقة وحذف Old One في نفس العملية.

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