כיצד לאנדקס טבלה עבור שליפה הכוללת תנאי על טווח (In, Between) ומיון

28/02/2014

נתונה טבלה MyTbl ואנחנו רוצים לשלוף ממנה נתונים העונים לתנאי על טווח של ערכים ולמיין את הפלט.ה-SQL די ברור במקרה זה: Select *From MyTblWhere Col1 In (..) Order By Col2; והשאלה היא כיצד לאנדקס את הטבלה.מקובל שמאנדקסים טבלה קודם כל לפי העמודות שב-Where כדי שישלפו רק השורות המבוקשות,ולאחר מכן העמודות שב-Order By כדי שמה שנשלף יהיה ממויין,אלא שזה נכון לגבי תנאים על ערכים בודדים (הכוללים סימן =) ואילו במקרה זה אם ניצור אינדקס לפי Col1 ואחריו Col2 – נקבל סט ממויין לפי הערכים שב-Col1 (בניגוד למקרה הקודם בו יש רק ערך אחד ב-Col1 ולכן...
תגיות: ,
אין תגובות

בחירה בין Nested Loops, Merge Join, Hash Match בביצוע Join בין טבלאות

22/02/2014

כשמתבצע Join בין טבלאות – המערכת יכולה לבחור באחד משלושה אלגוריתמים לביצוע המשימה באופן פיזי: Nested Loops יתבצע כשיש לפחות טבלה אחת קטנה ובשניה יש אינדקס שמקל על החיפוש, ואז עבור כל שורה בראשונה – היא תחפש התאמות בשניה. Merge Join שהוא האלגוריתם הכי יעיל יתבצע כששתי הטבלאות ממויינות או בעלות אינדקס מתאים, ואז המערכת עוברת במקביל על שתי הטבלאות ומחפשת התאמות. Hash Match שהוא האלגוריתם הפחות יעיל יתבצע כשאין אינדקסים להיעזר בהם והטבלאות אינן ממויינות; ואז המערכת תחלק כל טבלה לקבוצות לפי שיטה מסויימת, ותחפש התאמות בין קבוצות מתאימות (מן הסתם תבצע בינהן Nested Loops). להלן דוגמה...
אין תגובות

קליטת קובץ לטבלה מרובת עמודות

20/02/2014

יש לנו קובץ ואנחנו מעוניינים לקלוט אותו לטבלה תוך פירוקו לעמודות (מקובל שהעמודות בקובץ מופרדות בפסיקים).יש לכך שלל פתרונות, והמקובל או המיידי הוא להשתמש באשף המובנה: קליק ימני על הדטבייס אליו רוצים לייבא, Tasks, ו- Import Data. האשף יודע לספק תצוגה מקדימה של הנתונים, לבחור בטבלת יעד, ועוד. דא עקא, שלאחר שבחרנו, והגדרנו ואישרנו; הריצה מתחילה ונופלת באמצע באמתלאות שונות: Page Code, הגדרות שפה, תווי סיום שורה, אי התאמה של חלק מהנתונים וכו'; וידינו קצרו מלהושיע.. למי יש כח עכשיו להתחיל להתרוצץ בכל מיני פורומים ולהריץ שאילתות בגוגל כשיש לתקתק את המשימה?כשאני נמצא במצב כזה אני מנסה קודם...
אין תגובות

חפיפה בין אינדקסים

16/02/2014

נתקלתי פעם במקרה הבא- טבלה שהוגדרו לה שני אינדקסים: Primary Key & Clusterd Index על עמודות Col1, Col2, Col3. Unique Index על עמודות Col1, Col2. כבר במבט ראשון אפשר לראות בעייה בסיסית – אם כל צירוף של Col1, Col2 הוא יחודי, מדוע המפתח כולל גם את עמודה Col3?זה לא נכון, מי שינסה להכניס לטבלה את הצירופים 1,1,2ו-1,1,3 יקבל הודעת שגיאה בגלל האינדקס השני (למרות שלפי הגדרת המפתח שני הצירופים נראים תקינים), ומי שיצור Foreign Key לטבלה – יאלץ לכלול בה עמודה מיותרת ללא צורך. יתכן ש"כוונת המשורר" הייתה שהמפתח הוא Col1,Col2 אבל הוא רצה ליצור Clustered Index שיכלול...
אין תגובות

Filtered Indexes

15/02/2014

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

האם פרוצדורה יכולה להתאבד?

07/02/2014

כנראה שמשעמם לי בחיים אם הגעתי לנושא הרה גורל זה: האם פרוצדורה יכולה לבצע Drop לעצמה?בואו ננסה: Use tempdb;Go Create Proc P AsPrint 'Before:';Print @@ProcID;Print Object_Name(@@ProcID);Drop Proc P;Print 'After:';Print @@ProcID;Print Object_Name(@@ProcID);Go היא אמורה לכתוב את הקוד והשם שלה לפני ההתאבדות ואחריו.נריץ: Exec P; כפי שאפשר לראות היא הדפיסה את הקוד והשם שלה לפני ההתאבדות,אך לאחר מכן- השם לא נמצא בטבלאות המערכת ולכן רק הקוד ששמור במשתנה המערכת הוצג;והכי חשוב- העובדה שהיא נמחקה מהאובייקטים של השרת לא הפריעה למה שכבר רץ להמשיך הלאה באופן תקין.מעבר לעיסוק בזוטות – כשמשנים פרוצדורה תוך כדי זה שהיא רצה – זה לא ישפיע על הריצה הנוכחית שמתבצעת...
תגיות: , ,
אין תגובות

חיפוש עבודה בהייטק מעל גיל 50

01/02/2014

לאחרונה עברתי לעבודה חדשה בתחום הטכני שלי כאשר אני בן 50+: עמוק בתחום בו אף אחד – כך לפי השמועות – לא סופר אותי, והייתי אמור לקבל סירובים מנומסים. זה לא קרה.אני רוצה לסכם רשמים ותובנות מהתהליך הזה לטובת עובדים אחרים בתחום שהם "בגילנו", וכל זה מפרספקטיבה אישית: אני מבין מצויין שזה אינו מחקר מדעי, אני אינני "מדגם מייצג" אלא מקרה פרטי, וזה שלי לא הייתה בעייה אינו אומר שאין בעייה. אני רוצה לכתוב על איך הדברים נראים ממרומי מגדל השן והשנים, על איך שאולי אני נראה (כלומר- לא איך אני נדמה בעיני עצמי, וגם לא איך אני נדמה...
תגיות: ,
7 תגובות