Menu
עברית Русский
מכללת פרקטיקיו
- מתחילים ללמוד חינם -
קורסי תכנות / סייבר / ניהול רשת

אינדקס - Non-clustered Index

קורסים למנהלי רשת מסלול מנהלי רשת
עם התמחות בשרתי מיקרוסופט
מסלול סייבר והאקינג - Hacking מסלול תקשורת ואבטחת מידע
Cisco CCNA & FortiGate & Checkpoint
מומחה ווירטואליזציה
VMware & Hyper-V
מסלול לינוקס ו-DevOps מומחה ענן של אמזון - AWS מומחה ענן של מיקרוסופט - Azure מומחה ענן של גוגל - GCP מומחה שרתי SCCM - System Center
של מיקרוסופט לארגונים גדולים
קורסי תכנות מסלול Full Stack דוט-נט
יסודות התכנות
מסלול Full Stack דוט-נט
צד שרת - Backend
מסלול Full Stack דוט-נט
צד לקוח - Frontend
מסלול Full Stack Node.JS קורסי תכנות נוספים
Java / Python / PHP
מפתח אפליקציות - אנדרואיד - אייפון מפתח משחקי מחשב - Unity מפתח תוכנות לוונדוס - WinForms מסלול DBA - דטה אנליסט
התמחות במסדי נתונים – SQL
בדיקות תוכנה - QA בדיקות תוכנה - QA - אוטומציה בדיקות תוכנה - QA - בדיקות ידניות בדיקות תוכנה - QA - קורסים נוספים המלצות תלמידים על PracticU
סיכום על אינדקס - Non-clustered Index

בשיעור זה לומדים על אינדקס לא מקובץ מסוג Nonclustered: מריצים על טבלת TempOrders שאילתא עם סינון לפי עמודת לקוח שאין עליה אינדקס ורואים סריקה מלאה של האינדקס המקובץ, בונים דרך חלון New Index אינדקס לא מקובץ על אותה עמודה ורואים שהתוכנית משתנה לפעולת seek עם Key Lookup, מגלים את עקרון האינדקס המכסה כשהשאילתא מביאה רק את עמודת המפתח, בודקים איך הוספת עמודה נוספת משברת את הכיסוי ומחזירה את ה Key Lookup, ופותרים זאת בעזרת הוספת העמודה כעמודת Included עד לקבלת פעולת seek יחידה בעלות של 100%.

נושאי הסיכום המוצגים בשיעור:
1. פתיחה והרצה על עמודה בלי אינדקס: פותחים את קובץ הסקריפט של השיעור הקודם שעדיין פתוח עם הפקודה set statistics IO on ועם טבלת TempOrders שכבר יש עליה אינדקס מקובץ, וכותבים שאילתא חדשה שמביאה את כל העמודות מטבלת TempOrders עם הסינון "where customerid ='TOMSP'". ההרצה מחזירה 6 שורות, והסטטיסטיקה מדווחת על scan count 1 ועל 22 קריאות לוגיות. בתוכנית הביצוע מתקבלת פעולת "Clustered Index Scan (Clustered)" על האינדקס המקובץ של הטבלה בעלות של 100%, כי האינדקס המקובץ ממוין לפי מזהה ההזמנה ואין לו דרך לאתר ישירות שורות לפי עמודת הלקוח. האומדן של מספר השורות משתפר ל 12 רק אחרי שהשרת מייצר אוטומטית סטטיסטיקה על העמודה המסוננת.
2. יצירת אינדקס לא מקובץ בחלון New Index: לוחצים לחיצה ימנית על תיקיית האינדקסים של dbo.TempOrders ובוחרים ביצירת אינדקס חדש. בחלון שנפתח רואים תחילה אזהרה שצריך להוסיף לפחות עמודת מפתח אחת לאינדקס, נותנים לו את השם "NonClusteredIndex_Customerid", משאירים את סוג האינדקס כ Nonclustered ולא מסמנים אותו כ Unique, ומוסיפים את עמודת CustomerID מסוג nchar(5) בסדר עולה כעמודת המפתח.
3. הסקריפט המיוצר של האינדקס: מהחלון מייצרים סקריפט לחלון שאילתא חדש, הוא פותח בפקודת USE על Northwind, ממשיך ב "SET ANSI_PADDING ON", ואז "CREATE NONCLUSTERED INDEX [NonClusteredIndex_Customerid] ON [dbo].[TempOrders]" ואז בסוגריים "([CustomerID] ASC)". אחרי ההרצה מופיע האינדקס החדש בתיקיית האינדקסים של הטבלה לצד האינדקס המקובץ, והוא מסומן כלא ייחודי וכלא מקובץ.
4. התוכנית אחרי הבניית האינדקס: מריצים שוב את השאילתא עם אותו סינון, והתוכנית משתנה לגמרי: בראשה מופיע "Nested Loops (Inner Join)" בעלות של 0%, שמחבר בין "Index Seek (NonClustered)" על האינדקס החדש NonClusteredIndex_Customerid בעלות של 18% ובין "Key Lookup (Clustered)" על האינדקס המקובץ בעלות של 82%. בהצצה ל seek רואים אומדן של 6 שורות, אחסון מסוג RowStore ורשימת פלט שכוללת את מזהה ההזמנה ואת עמודת הלקוח, ובהצצה ל Key Lookup רואים 6 הרצות שכל אחת מהן מחזירה שורה אחת מהאינדקס המקובץ. כלומר ה seek מוצא באינדקס את השורות המבוקשות, וה Key Lookup שולף עבור כל אחת מהן את שאר העמודות.
5. אינדקס מכסה: משנים את השאילתא כך שתביא רק את עמודת הלקוח במקום את כל העמודות, ומריצים אותה עם אותו סינון. עכשיו מתקבלת בתוכנית פעולת "Index Seek (NonClustered)" יחידה בעלות של 100% ובלי Key Lookup בכלל, כי כל העמודות שהשאילתא צריכה נמצאות כבר בתוך האינדקס עצמו. זהו עקרון האינדקס המכסה: כאשר רשימת הפלט של השאילתא כלולה באינדקס, השרת חוסך את החזרות אל האינדקס המקובץ ומסתפק ב seek אחד.
6. שבירת הכיסוי בהוספת עמודה: מוסיפים לרשימת הפלט את עמודת תאריך ההזמנה וכותבים "select customerid, orderdate from temporders" עם אותו סינון "where customerid ='TOMSP'". התוכנית חוזרת מיד למבנה של Nested Loops עם seek בעלות של 18% ו Key Lookup בעלות של 82%, כי עמודת תאריך ההזמנה אינה קיימת בתוך האינדקס הלא מקובץ והשרת נאלץ לחזור אל האינדקס המקובץ עבור כל שורה בנפרד.
7. בדיקת שבריות האינדקס: פותחים על האינדקס החדש את חלון ארגון האינדקסים מחדש, ושם מופיע ערך "Total Fragmentation" של כשני שלישים בקירוב, כלומר חלק ניכר מעמודי האינדקס אינו רציף פיזית. זו בדיקה שעוזרת להחליט מתי כדאי לארגן אינדקס מחדש או לבנות אותו מחדש.
8. הוספת עמודת Included: פותחים את חלון "Index Properties - NonClusteredIndex_Customerid" ורואים שסוג האינדקס הוא Nonclustered, הוא אינו מסומן כ Unique, ועמודת המפתח שלו היא CustomerID בסדר עולה. מוסיפים את עמודת תאריך ההזמנה מסוג datetime שמאפשרת ערכים ריקים, אבל הפעם תחת המקטע "Included columns" ולא כעמודת מפתח, כך שהיא תישמר בתוך עלי האינדקס בלי לשנות את סדר המיון שלו.
9. ניסיונות סקריפט והפתרון הסופי: בניסיון ראשון מריצים שוב פקודת יצירה עם אותו שם אינדקס ועם עמודת Included, ומקבלים את השגיאה "Msg 1913, Level 16, State 1, Line 2" שמשמעותה שאינדקס בשם הזה כבר קיים על הטבלה. בניסיון השני מנסים לעדכן את האינדקס הקיים בפקודת ALTER INDEX, ומקבלים את השגיאה "Incorrect syntax near 'INCLUDE'." כי פקודה זו אינה תומכת בהוספת עמודות Included. המרצה מחפש באינטרנט את הדרך הנכונה ומגיע לפתרון של בניית האינדקס מחדש: בסקריפט הסופי מופיעה גם שורת מחיקה של האינדקס הישן שמסומנת כהערה, ואז "CREATE INDEX [NonClusteredIndex_Customerid] ON [dbo].[TempOrders]" עם "([CustomerID] ASC)" ואז "INCLUDE( [OrderDate])", וההרצה מסתיימת בהצלחה.
10. התוצאה הסופית: מריצים שוב את השאילתא שמביאה את עמודת הלקוח ואת עמודת תאריך ההזמנה, והפעם מתקבלת בתוכנית פעולת "Index Seek (NonClustered)" יחידה בעלות של 100%, בלי Nested Loops ובלי Key Lookup, ובהצצה לאופרטור רואים 6 הרצות שמחזירות 6 שורות ורשימת פלט שכוללת גם את עמודת הלקוח וגם את עמודת תאריך ההזמנה. בחלון המאפיינים של האינדקס רואים שעמודת תאריך ההזמנה מופיעה תחת Included columns, כלומר האינדקס חזר לכסות את השאילתא במלואה.

בסיום השיעור למדנו לזהות מתי שאילתא מביאה לסריקה מלאה של האינדקס המקובץ, לבנות על העמודה המסוננת אינדקס לא מקובץ ולקרוא בתוכנית הביצוע את השילוב של seek עם Key Lookup, להבין מתי אינדקס מכסה שאילתא ומתי הוספת עמודה משברת את הכיסוי, לבדוק את שבריות האינדקס, ולהוסיף עמודות Included כדי להחזיר את הכיסוי ולהגיע לפעולת seek יחידה בעלות של 100%. השיעור הבא עוסק בפונקציה Scalar - ללא פרמטרים.SR930NCI
סקר שוק נכון לתאריך – 01/09/2011

הסבר קצר על שיטת הלימוד אונליין

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


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

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


מה לעשות אם לא מבינים משהו בסרט?

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


האם יש לכם כיתות לימוד רגילות?

להשכיר כיתה + לשלם משכורת למרצה = 17 אלף ש"ח עלות הקורס לתלמיד.
אצלנו בסרטונים מקבלים אותו חומר לימוד
ואפילו יותר, כי אין מגבלה של זמן למרצה (כמו שיש בכיתה),
בנוסף מקבלים בדיוק אותה תעודה בינלאומית,
כי מבחן הוא מבחן אחיד לכולם המתבצע במרכז בחינות מורשה
והכי חשוב שמקבלים את אותם המרצים, שמלמדים בכיתה רגילה,
רק שצילמנו אותם בסרטונים
והמחיר בסרטונים רק 350 ש"ח ולא 17 אלף כמו בכיתה רגילה.



קיימים במכללה שני מסלולי לימוד:
  1. מסלול לימוד חופשי, בלי תעודה, להעשרת ידע כללי.
    מסלול לימוד חופשי, מתאים בעיקר למי שעובד בתחום וכבר יש לו תעודות והוא לא רוצה עוד מבחנים ותעודות.

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

בסיום קורס ניתן לקבל תעודות הבאות:
1. תעודה של המכללה - מותנה בהגשת פרוייקט גמר בסוף הקורס
2. תעודת הסמכה בינלאומית של מיקרוסופט העולמית - מותנה במעבר מוצלח של מבחן הסמכה חיצוני של מיקרוסופט (מבחן זה מתבצע כל שבוע במרכז בחינות מורשה בתל-אביב)


מידע כללי:
1. חומר הלימוד מורכב ממאגר עצום ומסודר מאוד של סרטים מקצועיים, הניתנים לצפיה מהבית. מאגר זה כולל הרצאות מוקלטות בעברית בצורה מסודרת ע"י המרצים הטובים ביותר. רשימת הסרטים המלאה נמצאת בתפריט בצד ימין.
2. כל סטודנט במכללה מקבל שם וסיסמה לצורך גישה לשרת הקבצים שלנו.
השרת מכיל את כל התוכנות הדרושות ללימוד וכן חומר עזר
3. הקורסים מועברים בהתאם לסילבוסים של החברות המובילות: Microsoft, Cisco