בעיה עם TableSample

pitoach

New member
1000 רשומות זה דבר זניח לחלוטין ביחס למליארד

רשומות שמבצעים עליהם NEWID שיטה זו נועדה לטבלאות גדולות בעיקר. בבדיקה שערכתי מצאתי הבדלים של כדקה ריצה עם NEWID לעומת 2 שניות ללא (וההבדל יכול להיות הרבה יותר גדול!). זו גם התשובה שבפורום TSQL האנגלי של מייקרוסופט נבחרה כתשובה הטובה ביותר, כאשר מישהו שאל על טבלה עם 10 מליון רשומות (תשובה שלי ששמתי שם... אני גולש שם בכינוי דומה, וניתן לראות את הדיון שם בערך חודשיים אחורה). * יש לקרוא את כל הקישורים שהבאתי אם רוצים להבין, כי כל מקרה נותן מיטוב שונה והשימושים השונים צריכים להיות ספציפית לפי מסד הנתונים שלך. מה שטוב למסד נתונים אחד לא בהכרח יהיה מיטבי למסד נתונים אחר. למשל יש השפעה של אינדקסים/סוג טור/מספר נתונים ואופי העבודה עם הנתונים ועוד הרבה גורמים. לכן תמיד יש לבדוק את כל השיטות יעילות ולבחור את מה שמתאים לך ** 100 רשומות ?!? בשביל 100 רשומות אין לך בכלל מה לבדוק מיטוב. זה בדיחה בשביל שרת SQL ואתה לא יכול לבדוק אפילו מה טוב יותר כי כל שיטה שתבחר תרוץ פחות מאלפית שניה כניראה. במקרה של 100 רשומות תבחר את השיטה הכי נוחה ובטח ש SAPLE לא מתאים לך! דגימה נועדה למסדי נתונים "קצת" יותר רציניים
 

pitoach

New member
שאלה להבנה: מי יגיע מהר יותר, רץ אולימפי או

שאלה להבנה: מי יגיע מהר יותר, רץ אולימפי או זקן בן 80 חסר כושר שבקושי הולך? אם אורך המסלול הוא מילימטר אחד לא תוכל לבדוק את ההבדל בכלל! ב"רגע" שכל אחד מהם יתחיל לרוץ הוא גם יסיים מבחינתך. האם זה אומר שהרץ האולימפי לא מהיר יותר?!? תקרא את מה שרשמתי מעל עם הכותרת "1000 רשומות זה דבר זניח לחלוטין ביחס למליארד". זה מצחיק לשאול את השאלה כשיש לך 100 רשומות בדיוק כמו השאלה על הרץ האולימפי SQL עובד בקלות עם מסדי נתונים בגשלים של מאות טרות בייט ועם טבלאות עם מליארדי רשומות גם ואתה שואל על מיטוב עבור 100 רשומות?!?
 

dror0548

New member
בעיה עם TableSample

היי, קראתי את המאמר של גרי http://blogs.microsoft.co.il/blogs/gerireshef/archive/2012/02/11/1011898.aspx הבנתי איך זה עובד ואת היעילות שלו מול NEWID איך אני מוודא שיחזרו לי תמיד 20 רשומות (ולא יותר או פחות או כלום) ? במנגנון הזה אני רוצה להשתמש בזה במקום NEWID אבל לא חוזרים לי 20, איך אני מאלץ אותו ? אני צריך לכתוב לולואה ?
 

Juventini1

New member
תשתמש ב- TOP

היי, אם אתה רוצה להחזיר 20 שורות בצורה אקראית(השורות שיחזרו הן אקראיות!!!), כמובן בתנאי שיש לך לפחות 20 שורות בטבלה הרצויה, אתה יכול להשתמש בדוגמא הבאה: * 20 SELECT TOP FROM YourTable ()ORDER BY NEWID אם אתה רוצה להחזיר כל פעם את אותן שורות תמיין לפי השדה הרצוי במקום השימוש ב- NEWID.
 

dror0548

New member
רשמתי בשאלה שאני לא מעוניין

להשתמש ב NEWID אלא בדוגמא כמו במאמר של גרי
 

pitoach

New member
תבדוק את ההסברים והדוגמאות הבאות

* בקצרה ניתן להציג את אחד הפתרונות היעילים והוא שימוש ב SAMPLE על מנת לבחור כ 1000 רשומות בצורה אקראית (פי 100 למשל ממה שרוצים באמת). ואז על התוצאות של השאילתה לבחור TOP 10 למשל הבחירה של 1000 רשומות אמורה להבטיח שיש לך לפחות 10 בתוצאות ומהווה את הבסיס למיטוב כדי לא לעבור על כל הרשומות כמו ב NEWID שהוא מאוד לא יעיל בטבלאות גדולות שליפת רשומות בסדר אקראי http://ariely.info/dnn/Blog/tabid/83/EntryId/57/Select-records-in-random-order.aspx כיצד לאפשר דפדוף (חלוקת הרשומות לדפים ומעבר בין הדפים) כאשר אנו רוצים לקבל את הרשומות בסדר אקראי? http://ariely.info/dnn/Blog/tabid/8...ough-Recordsets-that-are-in-random-order.aspx בחירת רשומה אקראית מטבלה http://ariely.info/dnn/Blog/tabid/83/EntryId/31/Select-a-random-row-from-table.aspx * בדוגמה זו יש גם אלגוריתמים ייחודי למצב בו אין בכלל שדה מספרי אלא שדה ייחודי טקסטואלי ולפיו נבחר את הרשומות שלנו ובכלל דוגמאות למצבים שונים
 

Juventini1

New member
רשמתי בתשובה גם איך לא להשתמש ב- NEWID

תקרא עד הסוף ותראה שיש עוד אפשרות. ואתה יכול לענות בצורה יותר עדינה שאנשים מנסים לעזור לך.
 

dror0548

New member
סליחה

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