!!! Data People 5 טיפים שאתם חייבים להכיר
- Nissim Elaluf
- 23 בפבר׳ 2024
- זמן קריאה 3 דקות
עודכן: 24 בפבר׳ 2024

שלום חברים
היום אני רוצה לכתוב כמב נקודות חשובות לכל הSQLיסטים פה
ושוב כמו במאמר האחרון בנושא SQL (לינק לסקרנים) נדבר על שיפור ביצועים
שימו ❤️ בהמון ראיונות עבודה הנושא הזה עולה ופה אתם מקבלים כמה נקודות מפתח קריטיות
טוב בואו נקפוץ למים ונתחיל
הנושא שלנו היום הוא “5 טיפים למיטוב ביצועי MSSQL“
MSSQL היא כמו שאתם יודעים מערכת חזקה וגמישה מאוד לניהול מסדי נתונים בה משתמשים ארגונים רבים. ועדיין, אופטימיזציה של הביצועים של השאילתות והפרוצדורות שנכתוב בה יכול להיות אתגר משמעותי, בייוחד כאשר נתמודד עם מערכי נתונים גדולים ושאילתות מורכבות. במאמר זה אשתף 5 טיפים לאופטימיזציה של ביצועים בMSSQL.
1)
תשתמשו ב-NOCOUNT ON

NO-COUNT
כאשר מופעלת שאילתת T-SQL, MSSQL שולח “הודעה” ללקוח כדי לציין כמה שורות הושפעו מהמשפט. זה יכול להיות שימושי במקרים מסוימים, אבל זה גם מוסיף תקורה ועשוי להאט את השאילתה, בייחוד כשיש המון הודעות כאלו כמו למשל לאחר הכנסה מאסיבית של נתונים לטבלה על ידי שימוש בStored Procedure שמבצע insert update,

מתיש אה ?
על ידי שימוש ב-SET NOCOUNT ON בתחילת ההליך או Stored Procedure, נוכל לכבות את ההודעות הללו ולשפר את הביצועים.
2)
אל תתקמצנו על מילים
תפרטו את שמות העמודות במקום להשתמש ב-SELECT *
כשאנו שולפים נתונים מטבלה, מפתה מאוד להשתמש בתחביר SELECT * המוכר והידוע כדי להציג את כל העמודות. ועדיין, זה עשוי להאט את השאילתה, במיוחד אם הטבלה כוללת המון עמודות. לכן ציינו את שמות העמודות שאתם באמת צריכים. זה לא רק ישפר את הביצועים אלא גם יקל על הקריאה והתחזוקה של הקוד שלכם.
3)
כשאתם מציגים את עצמכם אתם אומרים את שם המשפחה או רק שם פרטי?
במקרה שלנו אמליץ לכם להשתמש בשם המלא של הטבלה אותה אותה אתם מתחקרים.
איך? פשוט תוסיפו את שם הסכימה לפני שם הטבלה (כן זה הdbo. הזה שאתם רואים בכל מקום)
אז בעת הפנייה או שליפה מאובייקט או טבלה בקוד שלך, תמיד תכללו את שם הסכימה לפני שם האובייקט או הטבלה. זה עוזר ל-MSSQL לאתר את האובייקט מהר יותר ויכול לשפר את הביצועים, במיוחד במסדי נתונים גדולים. לדוגמה, במקום לכתוב SELECT FROM myTable, כתוב SELECT FROM mySchema.myTable.
ולחדים ביננו שקראו עד עכשיו בעיון אל תתעצלו ותפרטו גם את כל העמודות הספציפיות שאתם צריכים 😎

4)
בחיים דינאמיות זה מצויין אבל פה…
אל תשתמשו בשאילתות דינמיות (Dynamic Queries)
Dynamic Queries הן שאילתות SQL שנבנות באופן דינמי בזמן ריצה, בהתבסס על קלט משתמש או גורמים אחרים. בעוד שאילתות דינמיות יכולות להיות גמישות ועוצמתיות, הן יכולות גם להוות סיכון אבטחה חמור ויכולות להאט את השאילתה. במידת האפשר, השתמש בשאילתות סטטיות במקום, שבהן הצהרת SQL מוגדרת מראש ואינה משתנה בזמן הריצה.
דוגמה לשאילתה דינמית :

בדוגמה זו, אנו מכריזים בהתחלה על משתנה @tableName ומגדירים את הערך שלו כשם של טבלה שאנו רוצים לתשאל. לאחר מכן, אנו מכריזים על משתנה אחר @sql שיכיל את השאילתה שאנו רוצים לבצע. אנו משרשרים את שם הטבלה המאוחסנת ב-@tableName עם המחרוזת ‘SELECT * FROM ‘ כדי ליצור את מחרוזת השאילתה המלאה של SQL ולאחסן אותה ב-@sql
לבסוף, אנו מבצעים את השאילתה באמצעות הפונקציה EXEC ומעבירים את @sql כפרמטר. פעולה זו תפעיל את שאילתת ה-SQL הדינמית ותחזיר את תוצאות השאילתה
אמיצים ? תכתבו לי בתגובות איך הייתם כותבים שאילתה זו בצורה “סטאטית”
5) אומנם זהו הטיפ האחרון להיום אך הוא חשוב מאוד וכל מי שכותב \ מתחזק פרוצדורות חייב ליישם!
תשתמשו ב-EXISTS() במקום COUNT 1 ב Stored Procedure
כאשר אתם בודקים אם קיימת רשומה בטבלה, וזה יכול לנבוע מהרבה מקרים כמו למשל כשעושים UPSERT לטבלאות (או כל מיני יישומים של טעינות אינקרמנטאליות) מפתחים “מסוימים” משתמשים בפונקציה COUNT(*) או COUNT(1) בפרוצדורות שלהם. עם זאת, זה יכול להיות איטי, במיוחד עבור טבלאות מאסיביות. במקום זאת, השתמשו בפונקציה EXISTS() המחזירה true אם קיימת לפחות רשומה אחת ו-false אחרת. זה יכול לשפר את הביצועים, במיוחד בשילוב עם אינדקס נכון.
רוצים דוגמה ?
נניח שיש לנו טבלה בשם Employees עם עמודות EmployeeID ו-Name. אנו רוצים לבדוק אם עובד מסוים עם EmployeeID = 5 קיים בטבלה.
באמצעות COUNT:

והדרך המומלצת היא :

סיכום
אופטימיזציה של ביצועים ב MSSQL דורשת תשומת לב לפרטים ובחינה מעמיקה של הקוד שאתה כותב. על ידי שימוש בחמשת העצות הללו, תוכלו לשפר את הביצועים של שאילתות ה-MSSQL והפרוצדורות שלכם, ולהפוך אותם למהירים ויעילים יותר.
כתבו לי עוד עצות שאתם מיישמים ביום יום בתגובות !
Happy optimizing!
Commenti