הבדלים בין גרסאות אורקל השונות בנוגע למיון נתונים - ilDBA Portal

הבדלים בין גרסאות אורקל השונות בנוגע למיון נתונים

15/08/2011 | פורסם על ידי

היזהרו מלהניח הנחות – הן לא תמיד נכונות

מקובל לחשוב שפעולות מסוימות בפקודות SQL גורמות למיון של הנתונים, אולם היזהרו מלהניח הנחות – הן לא תמיד נכונות.

בעבר, פקודות כגון DISTINCT ו- GROUP BY אכן גרמו למיון של הנתונים, אולם החל מגרסת Oracle10g ואילך, הפקודות הנ"ל אינן גורמות בהכרח לביצוע פעולת מיון. בסיס הנתונים של אורקל החל מגרסת Oracle10g מבצע שימוש בפונקצית Hash כדי לבצע פעולות כגון DISTINCT ו- GROUP BY, עובדה אשר מביאה לכך שפקודות ה- SQL אשר כוללות פעולות אלה, אינן מחזירות את התוצאות ממוינות.

כדי להמחיש את הנושא, נריץ 2 פקודות SQL בגרסת Oracle9i ונבחן את תוכניות הפעולה שלהן:

SQL> SELECT DISTINCT department_id
         FROM employees;

PLAN_TABLE_OUTPUT
----------------------------------------
| Id  | Operation          | Name      |
----------------------------------------
|   0 | SELECT STATEMENT   |           |
|   1 |  SORT UNIQUE       |           |
|   2 |   TABLE ACCESS FULL| EMPLOYEES |
----------------------------------------

SQL> SELECT department_id,COUNT(*)
         FROM employees
         GROUP BY department_id;

PLAN_TABLE_OUTPUT
----------------------------------------
| Id  | Operation          | Name      |
----------------------------------------
|   0 | SELECT STATEMENT   |           |
|   1 |  SORT GROUP BY     |           |
|   2 |   TABLE ACCESS FULL| EMPLOYEES |
----------------------------------------

ניתן לראות בבירור כי בגרסת Oracle9i, תוכניות הפעולה כוללות ביצוע מיון של הנתונים (SORT GROUP BY ו- SORT UNIQUE). כעת, נריץ את אותן הפקודות בדיוק אולם הפעם בגרסת Oracle10g ושוב נבחן את תוכניות הפעולה שלהן:

SQL> SELECT DISTINCT department_id
         FROM employees;

PLAN_TABLE_OUTPUT
----------------------------------------
| Id  | Operation          | Name      |
----------------------------------------
|   0 | SELECT STATEMENT   |           |
|   1 |  HASH UNIQUE       |           |
|   2 |   TABLE ACCESS FULL| EMPLOYEES |
----------------------------------------

SQL> SELECT department_id,COUNT(*)
         FROM employees
         GROUP BY department_id;

PLAN_TABLE_OUTPUT
----------------------------------------
| Id  | Operation          | Name      |
----------------------------------------
|   0 | SELECT STATEMENT   |           |
|   1 |  HASH GROUP BY     |           |
|   2 |   TABLE ACCESS FULL| EMPLOYEES |
----------------------------------------

אם כן, ניתן לראות בבירור כי פעולת המיון נעלמה ובמקומה מבוצעת פעולת HASH (HASH UNIQUE ו- HASH GROUP BY). במקרים אלה, התוצאות של פקודות ה- SQL הנ"ל אינן בהכרח ממוינות שכן אורקל אינו מבצע מיון.

אז היזהרו מלהניח הנחות – פשוט בגלל שלא תמיד הן נכונות.

נתראה ברשומה הבאה!

עמי אהרונוביץ

ניתן ליצור קשר עם עמי דרך עמוד האודות שלו: אודות

2 תגובות ל- “הבדלים בין גרסאות אורקל השונות בנוגע למיון נתונים”

ליאור קינג | 16/08/2011 בשעה 02:03
commenter

Ami,
DISTINCT and GROUP BY – always sort the data.
Since Oracle 10.2, there is an additional algorithm for sorting data that the optimizer can choose called – HASH SORTING. This new algorithm may be in some cases faster and more efficient that the "regular" sorting algorithm – but still it is sorting data.

Ami Aharonovich | 16/08/2011 בשעה 06:33
commenter

Lior – I suggest that you double check your comment…
The new plans – which are HASH UNIQUE and HASH GROUP BY do not sort.
If you had a SQL statement with a DISTINCT, and the plan was SORT DISTINCT, now, since 10g, you might have HASH UNIQUE which should be faster, but does not sort your results.
Please do check me and let me know…

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

Baruch Osoveskiy

תיקון מהיר לדיסק איטי

  רציתי לשתף אתכם בתקלה שהיתה לי ובפיתרון שלה. לפעמים אני רוצה לבדוק גירסה חדשה או יכולת שלא מתועדת מספיק בספרות, ואז אני מסתפק בהקמה של סביבה ווירטואלית בדרך כלל על חומרה זולה (לפעמים זולה [...]
OS

OS Background operations

אורי לרנר בטיפ קצר ושימושי על העברת פעולות לרקע במערכת [...]
רשימת

רשימת הפיצ'רים החדשים של אורקל 12.1

אורקל פרסמו את הספרות הרשמית לגרסה 12.1 שיצאה לאחרונה וזמינה להורדה. בין שאר הספרים (החשובים כל אחד שלעצמו), פורסם הספר המסקרן ביותר בעיני – Oracle Database 12c Release 1 (12.1) New Features. זהו ספר שראוי שכל DBA [...]
גרסת

גרסת אורקל 12c זמינה להורדה

בשעה טובה ולאחר המתנה סופר ארוכה, גרסת אורקל 12c (גרסה 12.1) זמינה סוף סוף להורדה רשמית מהאתר של אורקל. הגרסה החדשה מנסה לתת פתרונות לעולם ה"ענן" – ומוסיפה פיצ'רים חדשים שבאים לתת מענה בדיוק [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: