26-12-2005, 16:29
|
|
|
חבר מתאריך: 13.12.05
הודעות: 1,963
|
|
תרגום חופשי לציטוט שלי:
אם תשתמש בקבץ לפי, התוצאה שלך תהיה מסודרת לפי הטורים שבחרת לקבץ, כאילו שהיית עושה סדר לפי לאותם טורים.
^ מה שמסביר את תופעת ה"סידור" שלך.
וציטוט מהמאמר שהבאתי:
ציטוט:
Where is the logical flaw? As stated above, this is a typical query in which all the data comes from a single table: CUSTOMERS. Interestingly, it returns a CUSTOMER_ID. There's no prize for guessing that this is likely to be the primary key, uniquely identifying each row in CUSTOMERS. However, we need a DISTINCT; one customer may have ordered several times in the period of interest. In other words, we are fixing with DISTINCT a problem of our own design.
This is a "Penelope" type of query. Penelope, as told in Homer's Odyssey, was the wife of Ulysses, king of Ithaca. Hoping for the return of her husband from Troy, she kept suitors at bay by pretending that she would consider them once she completed her weaving--which she kept going by undoing at night what she had done during the day.
Like Penelope, we are doing a lot of work by executing a regular join and bringing back many rows, only to undo a large part of it in order to retrieve the resulting set. (The "best" examples of Penelope queries are usually met with queries involving complex views, however.)
|
שבגדול, מה שזה אומר:
"אנחנו לוקחים את כל השדות, רק כדי לסנן את הכפולים לבסוף".
ליתר דיוק, הפעולה DISTINCT היא פעולה "ערבית".
היא לוקחת את כל השדות שמתאימות לשאילתא שלך, ורק לאחר מכן מסננת את הכפילויות.
אומנם אתה מריץ query אחד ומקבל תוצאה אחת, אבל זה כאילו הרצת שתיים (או אחד וחצי?).
הפתרון שמוצע שם משתמש בsubqueries כדי לקבל בquery אחד את התוצאות הדרושות.
אבל, ויש אבל, תכנון נכון של מסד הנתונים לא יגרור שימוש בDISTINCT.
כמו שאתה יכול לקרוא כאן יש הסבר, וגם תוצאות של זמן ריצה שמסביר בדיוק את מה שאמרתי.
אם אני טועה, אתה מוזמן לתקן. יכול להיות שיש לי בעיה בהבנת הנקרא איפה שהוא
נערך לאחרונה ע"י GreenBerret בתאריך 26-12-2005 בשעה 16:36.
|