When it is recommended to use temporary tables in Stored procedures?
שלום לכולם,
שמי אסף פרנקל, ואני ארכיטקט ויועץ בתחום מסדי נתונים, בזמני הפנוי אני עוסק גם בניהול פרויקטים.
בפוסט קצר זה אעסוק בשאלה נפוצה, מתי יש להשתמש בטבלאות זמניות בתוך Stored Procedures.
מצד אחד, כמובן, לכל יצירה של טבלא זמנית יש מחיר, היא נרשמת ב TempDb, ובסך הכל זו פעולה כבדה. לכן אם יש לנו שאילתת סינון מומלץ בדרך כלל לבצע Join מורכב בין שאילתת הסינון לשאר השאילתא ולא להשתמש בטבלא זמניות.
מנסיוני יש מספר מקרים בהם בכל זאת השימוש מומלץ:
שימוש חוזר - עדיף לשמור בטבלא זמנית את תוצאת שאילתת הסינון ואז לבצע Join 3 פעמים עם הטבלא הזמנית הקטנה, מאשר להוסיף את ה Join לשלושת השאילתות
מספר לא ידוע של רשומות - לעיתים קרובות קשה לאופטימייזר להעריך את מספר הרשומות שיחזרו משאילתת הסינון. פיצול לשניים יאפשר לאופטי מייזר לדעת במדויק את מספר הרשומות, ולפי מספר זה לייצר תכנית מתאימה ל Join של הטבלא הזמנית עם שאר השאילתא
ישנם מקרים נוספים, ואשמח לראות אותם בתגובות שלכם.
בנוסף, אתגר, אם הסיבה שבחרנו הנה שימוש חוזר, מתי כדאי להשתמש דווקא בטבלא זמנית מסוג temporary table ולא מסוג table variable?
קריאה מהנה,
אסף