בעית ביצועים בביצוע חיתוך בין פוליגון לנקודות
-
יום רביעי 21 מרץ 2012 14:03
שלום לכולם
אנחנו עובדים ב SQL SERVER 2008. עלינו לזהות האם אוסף נקודות גיאוגרפיות, נמצא בתוך פוליגון נתון. מדובר בשלב זה בסדר גודל של 100000 נקודות. למרות שהגדרנו אינדקס מרחבי על טבלת הנקודות, נראה ש SQL אינו משתמש באינדקס, אלא במפתח הראשי של הטבלה. מבדיקה בפרופיילר עולה שהזמן שנדרש לבדיקה האם נקודה נמצאת בפוליגון הוא סדר גודל של 2-3 מילי שניות, ולמעשה הזמן המצטבר הוא גדול מכך.
כל עזרה תתקבל בתודה
אריה
אריה שטרן
כל התגובות
-
יום ראשון 25 מרץ 2012 17:56מנחה דיון
היי אריה
אם אתה מוסיף INDEX HINT
ומכריח את האופטמייזר להשתמש באינדקס, האם אתה רואה שיפור?
Ami Levin, SQL Server MVP. CTO, DBSophic LTD. - http://www.dbsophic.com/ --Performance is the most significant driver in maintaining data and service availability.--
- סומן כתשובה על-ידי אריה שטרן יום שני 26 מרץ 2012 06:26
-
יום שני 26 מרץ 2012 06:26
עמי
תודה
התשובה לצערי שלילית. הוא לא מוכן להריץ את השאילתא כאשר יש רמז כפי שהצעת.
אריה שטרן
-
יום שני 26 מרץ 2012 12:55מנחה דיון
היי אריה,
מה הודעת השגיאה שאתה מקבל?
האם אתה יכול לצרף סקריפט לשחזור התופעה?
Ami Levin, SQL Server MVP. CTO, DBSophic LTD. - http://www.dbsophic.com/ --Performance is the most significant driver in maintaining data and service availability.--
-
יום שני 26 מרץ 2012 20:50
עמי
בינתיים עקפנו את הבעיה מכיוון אחר.
תודה על העזרה.
אריה שטרן
-
יום רביעי 28 מרץ 2012 08:13משיב
אריה אם תרצה לחזור לבעיה ולפתרון אשמח לעזור
הזמנים שאתה רושם אינם סבירים להתפשר עליהם בדרך כלל. בדקתי על מליון רשומות ועדיין הייתי ברמת שניות בסך הכל. בדקתי ברמת CLR על מליון רשומות עם לולאה מלאה (מה שאומר שאין שימוש באינדקס אלא הרצה של הלוגיקה של החיפוש... ז"א הפונקציה של החיפוש רצה עבור כל נקודה מחדש) ועדיין התוצאה לא צריכה לעבור כמה שניות.
* אם הייתי חייב לנחש בלי ביסוס אז הייתי זורק שהבעיה היא אולי ביצירת אינדקס לא מתאים (למשל אינדקס רגיל במקום אינדקס מיוחד או שימוש CELLS_PER_OBJECT לא מתאים או BOX גדול מדי וכו)
** האינדקס המיוחד (אינדקס מרחבי) של מייקרוסופט הוא משהו מרשים מאוד לדעתי ברעיון שלו והוא מאוד יעיל (אבל לוקח לשרת המון זמן לבנות אותו). הוא יכול להוריד חיפוש של שעתיים לכמה שניות של עבודה (לפחות מבדיקה שמישהו העלה לאינטרנט ונתקלתי בה פעם וזה נשמע לי סביר והגיוני). חיפוש ללא אינדקס במרחב הוא פעולה מורכבת (אני לא יודע מה הלוגיקה של מייקרוסופט אבל הלוגיקה שאני השתמשתי בה בשפת C# ונראית לי יעילה מאוד עדיין מורכבת מאוד), ולכן האינדקס המרחבי הוא בסיס למיטוב, אבל לצערי הסבר על האינדקס אפילו בסיסי יחייב אותי בערך 20 דקות הרצאה (או בלוג ארוך מאוד עם הרבה תמונות) ולא מתאים לפורום.
- סומן כתשובה על-ידי אריה שטרן יום רביעי 28 מרץ 2012 08:24
-
יום רביעי 28 מרץ 2012 08:25
תודה לכולם
אחזור לנושא רק בשבוע הבא, ולכן בשלב זה אני מודה לכולם ומפסיק לפחות זמנית את הדיון
אריה שטרן