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

יום חמישי, אוגוסט 7, 2014

מה הבעייה שמצריכה כותרת כזו ארוכה? נתחיל ממה שאינו בעייה ונמשיך למה שכן.אם אנו נדרשים ליצור אינדקס עבור שליפה מהסוג הזה- Select ...From ...Where Col1=...Order By Col2; האינדקס יהיה על Col1 (עמודה ראשית) ו-Col2 (עמודה משנית),ועמודות נוספות שמופיעות בפסוקית ה-Select יופיעו ב-Include.המערכת תשלוף בעזרת  Index Seek רק את השורות העונות על התנאי של Col1,ולא תצטרך למיין אותן כי הן יהיו כבר ממויינות לפי Col2 (העמודה המשנית באינדקס).היכן ומתי כן יש בעייה? כאשר התנאי על Col1 אינו שיוויון (=) אלא אי שיוויון או In + רשימת ערכים וכו’; המערכת לא תוכל לנצל ביעילות את האינדקס הנ”ל: היא אמנם תגיע בקלות...
אין תגובות

Filtered Indexes

יום שבת, פברואר 15, 2014

האופציה של Filtered Indexes התווספה בגרסת 2008,לטעמי יש לה מספר שימושים מעניינים שכדאי לקחת בחשבון,למרות שאולי יש כאלה שרואים בהם עוד feature מאלו שמיקרוסופט ממטירה עלינו ושנועדו לשמש תוכן לפוסטים ולהרצאות בכנסים מקצועיים בהם ממציאים כל מיני תסריטים שנועדו (במקרה..) בדיוק עבורם. כלומר- שומע לו DBA פלוני הרצאה מלומדת בנושא ותוהה כיצד להשתמש בזה: אולי ליצור אינדקס כזה על טבלת המכירות כי מנהל המכירות מאוד רוצה לקבל דיווח על המכירות של המוצר החדש שהושק לפני חודש? אולי על תאריכי הלידה של העובדים כדי לדעת מי חוגג ומתי? כנראה שלא..הפוסט הזה אינו טכני, ואנסה לסקור בקצרה לאילו מקרים האינדקס הזה...
אין תגובות

התנייה במספר השורות

יום שישי, יוני 15, 2012

אנחנו כותבים קוד שמבצע פעולה מסויימת רק אם מספר השורות בשליפה מסויימת גדול או שווה ל-2 (נניח). לפני שנתחיל לזרוק הצעות- ניצור טבלה מתאימה שיהיה על מה להתאמן: Use tempdb; Go   If Object_ID('Messages') Is Not Null Drop Table Messages; Go   Select * Into Messages From sys.messages;   Select ...
אין תגובות

ההבדל בין Unique Index ו-Unique Constraint

יום ראשון, מאי 8, 2011

בפורום בסיסי נתונים בתפוז נשאלה שאלה כיצד להגדיר עמודה שאינה מפתח כ-Unique (כלומר- ללא ערכים כפולים). עניתי- "בעזרת "Unique Index. זמן קצר לאחר מכן עדי הוסיף שאפשר להשתמש גם ב-Unique Constraint, ויש לי הרגשה שהוא ציין זאת לא בתור "גם לי יש מה לומר" אלא כי יש בהצעתו יתרון מסויים. כדי לעמוד על ההבדלים בין שתי ההצעות (לא הרבה..), נתחיל מהדומה, וניצור לשם כך טבלה עם שתי עמודות זהות שלאחת נגדיר אינדקס ולשניה אילוץ: If Object_Id('Try001','U') Is Not Null Drop Table Try001; ...
אין תגובות