Browse by Tags
All Tags »
Clustered Index (
RSS)
מהם Indexed Views? כיצד יוצרים אותם? מה התועלת בהם? אילו יתרונות, מגבלות, חסרונות וחלופות יש להם? ולבסוף- האם ניתן ליצור יותר מ-Clustered Index אחד על טבלה? (ספויילר: התשובה היא "לא, אבל..") מגרסת 2005 יש אפשרות ליצור אינדקסים על Views, או ליתר דיוק- ליצור Views כך שיהיה ניתן ליצור עליהם אינדקסים. ניצור לצורך ההדגמה טבלה, ניצור עליה Clustered Index, ניצור View על הטבלה, וניצור גם עליו Clustered Index אבל שונה: Use tempdb; Go If Object_Id( 'V_messages' , 'V' ) Is Not...
בדרך כלל כשאני מתבקש להסביר מהו אינדקס, אילו סוגי אינדקסים קיימים, למה הם משמשים ואילו אופציות קיימות בהם- אני פותח ב-"שערו נא בנפשכם ש.." ואז ממשיל את הטבלה לספריה או אולי לספר טלפונים או אפילו לתוכן עניינים של ספר או רשימת קניות התלויה על המקרר; והמאזין בטוח שהעגבניות ברשימת הקניות הן Clusterd Index, הספרנית הממושקפת מהספריה היא הסטטיסטיקה, ו-"כהן אבי" מספר הטלפונים הוא Index Scan.. בקיצור- לך תסביר מה המשל ומה הנמשל! אנסה אם כך להיצמד למשל המוצלח מכולם – הספריה – להדגים את...
בפוסט זה אני עוסק בנפח טבלאות כפי שמחושב על ידי פרוצדורת המערכת SP_SpaceUsed,
והשפעת פעולות הכנסת המידע ומחיקתו עליו. ניצור תשע טבלאות, נכניס לתוכן מספרים, נחשב את נפחן בעזרת SP_SpaceUsed, נרוקן אותן – בדרכים שונות, ושוב נחשב את נפחן בעזרת SP_SpaceUsed: T_1000_NoIndex -טבלת Heap בת 1000 שורות שתרוקן בעזרת פקודת Delete פשוטה T_1000_ClusteredIndex -טבלה בת 1000 שורות בעלת Clustered Index שתרוקן בעזרת פקודת Delete פשוטה T_1000_Index -טבלה בת 1000 שורות בעלת Index רגיל שתרוקן בעזרת פקודת Delete פשוטה...
ניצור טבלה- בשלב ראשון ללא אינדקס: Use tempdb; Go If object_id( 'SalesOrderDetail' ) Is Not Null Drop Table SalesOrderDetail; Go Create Table SalesOrderDetail(SalesOrderID int , SalesOrderDetailID int , CarrierTrackingNumber nvarchar(25) NULL , OrderQty smallint , ProductID int , SpecialOfferID int , UnitPrice money, UnitPriceDiscount money, LineTotal money, rowguid Varchar ( Max ) , ModifiedDate datetime) Go Insert Into SalesOrderDetail Select * From AdventureWorks.Sales.SalesOrderDetail;...
SQL Server שומר מידע סטטיסטי לגבי עמודות בטבלאות: בדרך כלל, בעת שמתבצעת לראשונה שליפה עם תנאי Where על עמודה-המערכת מחשבת סטטיסטיקה לגביה, ועושה בה שימוש בהמשך ליעול השליפות.
הסטטיסטיקה היא מידע לגבי התפלגות הנתונים לפי טווחים, כלומר- היסטוגרמה (לא גרף אלא טבלה שניתנת לתיאור גרפי כהיסטוגרמה), ובה עד 200 שורות. אלו לא הנתונים המדוייקים – בשביל זה יש טבלה – אלא תצוגה סיכומית שמאפשרת להעריך כיצד הנתונים מפוזרים.
למשל- אם יש טבלת עובדים ובה עמודת גובה, הסטטיסטיקה תאפשר למערכת לדעת שמעט עובדים יכולים...
נדרשנו למחוק נתונים ישנים מטבלאות גדולות: הגדולה שבהם בת כ-650,000,000 והאחרות אולי קטנות יותר אבל יחד מצטברות לנפח אחסון גדול ומיותר. ניסינו בהתחלה בתמימותנו – לבצע 'Delete From MyTbl Where Taarih<='20091231 כלומר- למחוק את כל מה שמשנת 2009 ודרומה, אבל זה הסתיים בתקיעת השרת למשך שעות ארוכות וניפוח הלוג למימדים מפלצתיים; ולבסוף עצרנו את המחיקה. החלטנו לעשות זאת בשלבים- כתבנו פרוצדורה שמתחילה מהתאריך הקטן ביותר בטבלה,
מוחקת בלולאה את 50,000 הרשומות הראשונות ממנו בכל איטרציה,
ועוברת לתאריך...
כשיוצרים Clustered Index מוגדר לו Fill Factor שקובע איזה אחוז מהדפים (Pages) יהיה מלא. הסיבה לכך היא שכשמוסיפים ערכים חדשים באמצע האינדקס ואין שם מקום פנוי (מה שקורה כשה-Fill Factor הוא 100%)- המערכת מוסיפה את הערך בדף חדש, ובדף המלא יוצרת הפניה אליו: יהיה מאוד לא יעיל "להזיז" את כל האינדקס מנקודת ההוספה ואילך מקום אחד קדימה, ולכן אין ברירה אלא לפצל אותו ובכך ליצור פרגמנטציה. כמובן שכשיש מקום פנוי- מכניסים לשם את הערך החדש. ניצור טבלה חדשה על בסיס טבלה קיימת ב-AdventureWorks, נכניס לתוכה...