PracticU

אינדקס - Filtered Index

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › אינדקס - Filtered Index
מילון מושגים:
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
בוליאני - סוג נתונים שיכול לקבל אחד משני ערכים בלבד: אמת (true) או שקר (false).
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
גיבוי - העתק שמור של נתונים שנשמר כדי לאפשר שחזור במקרה של תקלה, מחיקה או פגיעה במקור.
אחסון - שמירת נתונים באופן קבוע על התקנים כמו דיסקים או שירותי ענן, כך שיישמרו גם לאחר כיבוי.

אינדקס - Filtered Index
השיעור מציג Filtered Index: אינדקס לא מאוגד שמכיל רק שורות שעונות על תנאי מסוים. הוא מתאים כשכמעט כל השאילתות מסננות לפי אותו תנאי.
השלבים העיקריים
1. התנאי: בחלון Properties של האינדקס, בדף Filter, כותבים ביטוי בוליאני זהה לתנאי ה-WHERE בשאילתות. בדוגמה: ShipRegion IS NOT NULL.
2. גודל מצומצם: רק שורות שהתנאי שלהן מחזיר true נכנסות לאינדקס, ולכן הוא קטן מאינדקס על כל הטבלה.
3. יצירה בסקריפט: מוסיפים את התנאי אחרי WHERE בפקודת היצירה, ואפשר לשלב אותו עם INCLUDE.
4. אינדקס נוסף: בשיעור יוצרים אינדקס חדש ולא מוחקים את הקיים. לאחר היצירה הרשימה מציגה שלושה אינדקסים: אחד מאוגד, ושניים לא מאוגדים, ואחד מהם מסונן.
5. השוואת גודל: תצוגת המערכת sys.dm_db_index_physical_stats מראה את גודל כל אינדקס. האינדקס המסונן קטן מאינדקס מלא על אותן עמודות.
6. השפעת Included Columns: כשמוסיפים עמודות INCLUDE נוספות, האינדקס גדל. בדוגמה הגודל עלה מ-32 ל-80 קילובייט.
שימו לב
כל עמודה שמתווספת ל-INCLUDE מגדילה את האינדקס ומשפיעה על התחזוקה, הגיבוי והאחסון. יש להוסיף אותה רק אם השאילתות אכן זקוקות לה והיא משפרת את הביצועים.
בסיום תוכלו ליצור אינדקס מסונן שמתאים לתנאי שאילתה חוזר.
השיעור הבא בקורס: אינדקס - למה ביצועים משתפרים

פרקי ההרצאה: אינדקס - Filtered Index

  1. 00:00

    מהו Filtered Index ומתי משתמשים בו

  2. 00:51

    הגדרת תנאי הסינון באינדקס

  3. 01:51

    דוגמה: סינון לפי Ship Region שאינו NULL

  4. 02:49

    העתקת תנאי הסינון ליצירת האינדקס

תמלול ההרצאה: אינדקס - Filtered Index

הטקסט המלא של הדקות הראשונות בהרצאה «אינדקס - Filtered Index» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:13

    חלק נוסף שאני רוצה להראות לכם בעת יצירת Non-Clustered Index, אינדקס לא מאוגד, הוא הנושא של Filtered Index. הבה נסתכל בדוגמה הבאה, הכותרת שלנו כרגע זה לראות יכולת שלי נוספת בעת יצירת אינדקס כזה או אחר ליצור אותו כ-Filtered Index.

  2. 00:35

    אם אני עומד על אותו אינדקס שיצרנו אותו אך מכבר, קליק ימני, פרופרטיז, ויש לנו פייג' כאן נוסף מצד שמאל, של פילטרד בתוך החלק של הפילטרד אני צריך להכניס כאן ביטוי בוליאני זהה לחלוטין לביטוי שיופיע בתוך החלק של הworkclose ואשר רק בהינתן

  3. 00:59

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

  4. 01:24

    למשל, נניח שאנחנו שולפים תמיד את כל הנתונים שלנו מתוך טבלת Temp Orders, ומכיוון שאנחנו כרגע בוחנים את ה-Filtered Index אז אנחנו בעצם שולפים את ה-Customer ID שווה לערך מסוים, ומה שלנו אנחנו לוקחים את Tom SP, מצוין, אולם אני לא רוצה למיין את כל האינדקס שעל פי Customer ID,

  5. 01:57

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

  6. 02:16

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

  7. 02:49

    אני עומד על האינדקס, שוב קליק ימני פרופרטיז, ניגש כאן לחלק של הפילטר ומדביק את אותו תנאי בוליאני שיצרנו אותו שהוא שיפ ריג'ן איז נוט נאל רק עבור שורות המתקיים תנאי בוליאני זה שווה true שהשיפ ריג'ן באמת איז נוט נאל רק עבור אותן שורות אינדקס זה שורות אלו יהיו בעצם מאונדקסות בואו נציג לפנינו את הסקריפט נגיד

  8. 03:21

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: אינדקס - Non-clustered Index

ההרצאה הבאה: אינדקס - למה ביצועים משתפרים

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI