
הי מה שלומכם (: חוזרים עם סדרת מאמרים קצרים של טיפים מעולים לגרום לשאילתות שלכם לטוס 🚀
יצא לכם לעבוד עם כמויות גדולות של נתונים ?
יצא לכם לעשות חיבור בין מספר גדול של טבלאות ? לפעמים רק בשביל לייבא עמודה אחת נוספת ?
היום נראה בקצרה אילו דברים משפיעים בצורה משמעותית על זמן הריצה וננסה להבין מדוע. מוכנים ? מתחיל !
כללים לאופטמיזציות של שאילתות
ישנם כמה דברים מבטיח לכתוב בקצרה
לנסות להעביר את תנאי ה”Where” כמה שיותר מוקדם בתהליך, כך אפשר לעשות JOIN על טבלאות קטנות יותר
לנסות להימנע משימוש בכמה וכמה Joinים בשאילתה אחת בייחוד כשמעורבות טבלאות גדולות
ניתן להשתמש בUpdate על בסיס טבלה אחרת בדרכלל כשמדובר בייבוא של עמודה אחת או 2 ולא של כמות גדולה של עמודות
זה מהיר יותר כי Update פשוט לוקח את ההתאמה הראשונה מהטבלה השניה ולא סורק בצורה מיותרת את כל הטבלה
בJoin רגיל אנו מחייבים את הDB לסרוק את מלוא הטבלה על מנת לזהות סיבות לJoin אפילו אחרי מציאת “התאמה”
אנסה לתת דוגמה מיד בהמשך:
כמובן השיטה הבסיסית של הוספת אינדקס לעמודה עליה מתבססים בJoin
למשל בדוגמה הזו :
,,,

,,,
נראה סבבה אבל אם הטבלאות עצומות עם עשרות או מאות מליוני שורות ולא רק כמה עשרות אלפי שורות זה כבר מתחיל להיות כבד !
אז דבר ראשון שהייתי ניגש לטפל בנושא זה כמו שכתבתי למעלה
אם יש לי צורך רק בנתונים של 2012 (או כל פילטר קבוע אחר שאני מוסיף בטבעיות בסוף) אנסה להחיל אותו מוקדם יותר
ניתן ליצור טבלה זמנית # ולהזין לתוכה את ה Data מטבלת המקור אבל בתור התחלה רק 2 עמודות, ID + Date
למשל Sales2012#
עכשיו ניתן ליצור עוד טבלה זמנית שתכיל את כל השורות הנוספות שנצרכות לי
למשל ProductSold2012#
אותה נזין בנתונים עם שאילתת Insert Into על ידי Select מטבלת B לעיל עם Join קליל ל Sales2012# כA
הבעיה שעכשיו יש לי רק 4 עמודות
(
ID
DATE
Line Total
ProductId
כל השאר עמודת ריקות מלאות NULL
אותן נמלא על ידי שאילתות Update 😎
)
למשל אם נרצה למלא את ProductName ב ProductSold2012#
זה ייראה ככה :

וככה לנסות להזין עם עדכון את כל העמודות הנחוצות
במאמר הבא ארחיב על הדרך בה מנוע הSQL עובד ועל הסיבות הטכניות שבגינן אנו נדרשים לשנות מעט את צורת המחשבה שלנו בזמן כתיבת שאילתות על Data סטים גדולים …
וכמובן נרחיב גם על אינדקסים 😎
מקווה שקבילתם ערך 🙂
Comentários