"למה כתבת את זה עם תת-שאילתה?" שאל אותי סטודנט לגבי תרגיל בית שקיבל ממני, "כתבתי את זה עם JOIN וזה יצא יותר יעיל". 🤔
אני מודה שלא הייתה כאן איזו כוונה מיוחדת מצדי. אני נמנה עם ה-90% (לא בדקתי אחוז מדויק) שתת-שאילתה או CTE יותר מסתדרת להם בראש, ובדרך כלל אכתוב בצורה שהכי נוחה לי לגשת לבעיה.
ב-SQL אפשר לפתור כל בעיה בכמה צורות שונות - זה מה שיפה בה. זה אומר שכל אחד יכול לפתור כל בעיה בצורה שנוחה לו, לפי צורת החשיבה שלו, נכון? אז זהו, שלא. 🙂
קל לשכוח שכאשר אנחנו לא מבצעים תרגולי בית בסביבות סגורות, יש הרבה משקל ליעילות השאילתות שלנו.
זה יכול לבוא לידי ביטוי בכסף שאנחנו "שורפים" לחברה, ועד קולגות או אפילו לקוחות שחווים האטה בכל פעולה שהם מנסים לעשות על השרת.
אז בדקתי את השאילתה של הסטודנט.
אותה תוצאה בדיוק, כמות קוד כמעט זהה. שיפור דרמטי. 😯
אפשר לראות בתמונה שהשאילתה שלו (העליונה) יעילה ביותר מפי 2, ולמרות הדמיון בקוד ובתוצאה, תכניות הביצוע שונות לחלוטין.
שאילתות איטיות וכבדות הן חלק מהעבודה, אבל הרבה פעמים אפשר להביא לשיפור דרמטי ע"י שינוי קטן של הקוד. לבחור בטכניקה אחת במקום אחרת. אבל איך אפשר לדעת מראש? כנראה שאי אפשר. אבל לא צריכים להיות מומחי אופטימיזיציה - בשביל זה מבצעים בדיקה. לחיצה קטנה על כפתור הצגת תכנית הביצוע (מסומן בריבוע) יראה לכם בדיוק מה יותר יעיל, אפילו אם אתם לא יודעים לקרוא את הסכמות האלה.
ואם אתם לא עובדים עם SQL Server?
רוב הכלים הרציניים מאפשרים לכם להציג תכניות ביצוע גם על פלטפורמות אחרות, מאוד ממליץ לברר איך עושים את זה עם הכלי שאתם עובדים איתו.
כמובן שלא נבצע את הבדיקה בכל פעם שאנחנו כותבים שאילתה, אבל בשביל שאילתות שמריצים בתדירות גבוהה, או כאלה הרצות קבוע כחלק מאוטומציה כלשהי, שווה לקחת עוד כמה דקות ולהשוות מול עוד גרסה או שתיים. יכול להיות שתופתעו לטובה. 🤓
コメント