אודות קליעות למטמון

כאשר כתיבה למטמון מאופשרת, כל שאילתא מוערכת כדי לקבוע אם היא ראויה לקליעה למטמון.

קליעה למטמון פירושה ש-Oracle Analytics Cloud הצליח להשתמש במטמון כדי להשיב לשאילתא וכלל לא ניגש למסד הנתונים. Oracle Analytics Cloud יכול להשתמש במטמון השאילתות כדי להשיב לשאילתות באותה רמה של סכימה או ברמה גבוהה יותר.

גורמים רבים קובעים אם יש קליעה למטמון. הטבלה להלן מתארת גורמים אלה.

גורם או כלל תיאור

תת-סל של עמודות ברשימת SELECT צריך להתאים

כל העמודות ברשימת SELECT של שאילתא חדשה צריכות להיות קיימות בשאילתא במטמון כדי שתהיה ראויה לקליעה למטמון, או שיהיה ניתן לחשב אותן מהעמודות בשאילתא.

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

עמודות ברשימת SELECT יכולות להיות מורכבות מביטויים בעמודות של השאילתות במטמון.

Oracle Analytics Cloud יכול לחשב ביטויים בתוצאות במטמון כדי להשיב לשאילתא החדשה, אך כל העמודות חייבות להיות בתוצאה במטמון. לדוגמה, השאילתא:

SELECT product, month, averageprice FROM sales WHERE year = 2000

קולעת למטמון בשאילתא:

SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000

כיוון שאת averageprice אפשר לחשב מdollars ו-unitsales (averageprice = dollars/unitsales).

הפסוקית WHERE צריכה להיות מבחינה סמנטית זהה או תת-סל לוגי

כדי שהשאילתא תיחשב כקליעה למטמון, אילוצי הפסוקיתWHERE צריכים להיות שווי ערך לתוצאות במטמון או תת-סל של התוצאות במטמון.

פסוקית WHERE שהיא תת-סל לוגי של שאילתא במטמון ראויה לקליעה למטמון אם תת-הסל עומד באחד הקריטריונים הבאים:

  • תת-סל של ערכי רשימת IN. שאילתות המבקשות פחות רכיבים משאילתא במטמון של רשימת IN ראויות לקליעה למטמון. לדוגמה, השאילתא הבאה:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('EAST', 'WEST')

    נחשבת כקליעה בשאילתא הבאה במטמון:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • היא מכילה פחות אילוצי OR (אך זהים) מאשר התוצאה במטמון.

  • היא מכילה תת-סל לוגי של השוואה ליטרלית. לדוגמה, הפרדיקט הבא:

    WHERE revenue < 1000

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

    WHERE revenue < 5000
  • אין פסוקית WHERE. אם שאילתא ללא פסוקית WHERE כתובה במטמון, שאילתות שמקיימות את כל הכללים האחרים של קליעה למטמון נחשבות כקליעות למטמון ללא קשר בפסוקית WHERE שלהן.

בנוסף, עמודות בשימוש בפסוקית WHERE צריכות להיות ברשימת התחזית. לדוגמה, השאילתא הבאה:

SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')

לא מביאה לקליעה למטמון בשביל השאילתא המוגדרת מראש ברשימה הקודמת ניוון ש-REGION איננו ברשימת התחזית.

שאילתות ממד-בלבד חייבות להיות התאמה מדויקת

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

שאילתות עם פונקציות מיוחדות חייבות להיות התאמה מדויקת

שאילתות אחרות המכילות פונקציות מיוחדות כגון פונקציות של סדרות זמן (AGO, TODATE ו-PERIODROLLING), פונקציות הגבלה והיסט (OFFSET ו-FETCH), פונקציות קשר (ISANCESTOR, ISLEAF, ISROOT ו-ISSIBLING), פונקציות סכימה חיצונית, ובדרך כלל מדדי סינון חייבים גם הם להיות התאמה מדויקת עם עמודות התחזית בשאילתא במטמון. במקרים אלה, גם המסנן חייב להיות התאמה מדויקת. למדדי סינון, אם אפשר לכתוב את מדד הסינון בצורת פסוקית WHERE, אזי אפשר למנף את מטמון תת-הסל.

סל של טבלאות לוגיות חייב להתאים

כדי להיות ראויות לקליעה למטמון, כל השאילתות הנכנסות חייבות להיות בעלות אותו סל של טבלאות לוגיות כמו הרשומה במטמון. כלל זה מונע קליעות שקריות למטמון. למשל, SELECT * FROM מוצר לא מתאים ל-SELECT * FROM מוצר, מכירות.

ערכים של משתני מושב עבודה חייבים להתאים, כולל משתני אבטחה של המושב

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

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

תנאי join שווי ערך

הטבלה הלוגית המאוחדת המתקבלת כתוצאה מבקשת שאילתא חדשה חייבת להיות זהה ל- (או תת-סל של) תוצאות במטמון כדי להיות ראויה לקליעה למטמון.

התכונה DISTINCT חייבת להיות זהה

אם שאילתא במטמון מסלקת רשומות כפולות עם עיבוד DISTINCT (למשל, SELECT DISTINCT...), אזי בקשות לעמודות במטמון חייבות גם הן לכלול את עיבוד DISTINCT; בקשה לאותה עמודה ללא עיבוד DISTINCT היא החטאה למטמון.

שאילתות חייבות להכיל רמות סכימה תואמות

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

SELECT supplier, region, city, qtysold
FROM suppliercity

השאילתא הבאה מבקשת את הכמות שנמכרה ברמת העיר.

SELECT city, qtysold
FROM suppliercity

השאילתא השנייה מביאה לקליעה למטמון בשאילתא הראשונה.

סכימה נוספת מוגבלת

למשל, אם שאילתא עם העמודה qtysold כתובה במטמון, בקשה ל-RANK(qtysold) מביאה להחטאה במטמון. בנוסף, שאילתא המבקשת את qtysold ברמת הארץ יכולה לקבל קליעה למטרה משאילתא המבקשת את qtysold ברמת הארץ, אזור.

פסוקית ORDER BY חייבת להיות מורכבת מעמודות ברשימת הבחירה

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

אבחון התנהגות הקליעה למטמון

כדי להעריך טוב יותר את התנהגות הקליעה למטמון, הגדר את משתנה מושב העבודה ENABLE_CACHE_DIAGNOSTICS ל-4, כרפי שמוצג בדוגמה הבאה:

ENABLE_CACHE_DIAGNOSTICS=4