DCSIMG
עמוד הבית| חבילות השירות שלנו| חומר חופשי| צור קשר
When it is recommended to use temporary tables in Stored procedures? - בלוג היועצים של מיקרוסופט ישראל

בלוג היועצים של מיקרוסופט ישראל

When it is recommended to use temporary tables in Stored procedures?

 

שלום לכולם,

שמי אסף פרנקל, ואני ארכיטקט ויועץ בתחום מסדי נתונים, בזמני הפנוי אני עוסק גם בניהול פרויקטים.

בפוסט קצר זה אעסוק בשאלה נפוצה, מתי יש להשתמש בטבלאות זמניות בתוך Stored Procedures.

מצד אחד, כמובן, לכל  יצירה של טבלא זמנית יש מחיר, היא נרשמת ב TempDb, ובסך הכל זו פעולה כבדה. לכן אם יש לנו שאילתת סינון מומלץ בדרך כלל לבצע Join מורכב בין שאילתת הסינון לשאר השאילתא ולא להשתמש בטבלא זמניות.

מנסיוני יש מספר מקרים בהם בכל זאת השימוש מומלץ:

שימוש חוזר - עדיף לשמור בטבלא זמנית את תוצאת שאילתת הסינון ואז לבצע Join 3 פעמים עם הטבלא הזמנית הקטנה, מאשר להוסיף את ה Join לשלושת השאילתות

מספר לא ידוע של רשומות - לעיתים קרובות קשה לאופטימייזר להעריך את מספר הרשומות שיחזרו משאילתת הסינון. פיצול לשניים יאפשר לאופטי מייזר לדעת במדויק את מספר הרשומות, ולפי מספר זה לייצר תכנית מתאימה ל Join של הטבלא הזמנית עם שאר השאילתא

ישנם מקרים נוספים, ואשמח לראות אותם בתגובות שלכם.

בנוסף, אתגר, אם הסיבה שבחרנו הנה שימוש חוזר, מתי כדאי להשתמש דווקא בטבלא זמנית מסוג temporary table ולא מסוג table variable?

קריאה מהנה,

אסף

 

פורסם: Jun 24 2008, 10:53 PM by Assaf Fraenkel | with 2 comment(s)
תגים:

תוכן התגובה

Rotem Bloom כתב/ה:

לגבי שאלת האתגר שלך:

לפי מיטב ידיעתי השימוש ב- table variable יעיל יותר כאשר אין הרבה תוצאות חיפוש כי אז התוצאות נשמרות בזכרון של SQL ולא בטבלה TempDb. מה שכן אם יהיו המון תוצאות אז זה יהיה ממש אותו דבר והתוצאות ירשמו ב-TempDb.  

# July 3, 2008 8:53 AM

Assaf Fraenkel כתב/ה:

ההערה נכונה, אבל האתגר הוא למצוא את המקרה ההפוך בו דווקא טבלא זמנית תהיה יותר טובה

# July 3, 2008 9:16 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 7 and 6 and type the answer here:


Enter the numbers above: