هل يعتمد أداء مؤشرات الهندسة المكانية على حجم وكثافة الأشكال الهندسية؟

StackOverflow https://stackoverflow.com/questions/5486510

سؤال

الفهارس المكانية

بالنظر إلى الفهرس المكاني، فإن أداة الفهرس هي أداة الفهرس، أي الأداء العام للفهرس، فقط بنفس جودة الأشكال الهندسية الإجمالية.

على سبيل المثال، إذا كنت سأأخذ مليونًا من أنواع البيانات الهندسية وأدرجتها في جدول بحيث تكون نقاطها النسبية متواجدة بكثافة مع بعضها البعض، فهل هذا يجعل أداء هذا الفهرس أفضل بالنسبة للأشكال الهندسية المتطابقة التي قد يكون موقعها النسبي أكثر تناثرًا بشكل ملحوظ .

السؤال رقم 1

على سبيل المثال، خذ هذين الشكلين الهندسيين.

الوضع 1

LINESTRING(0 0,1 1,2 2)
LINESTRING(1 1,2 2,3 3)

إنهما متطابقان هندسيًا، لكن إحداثياتهما متباعدة بنقطة واحدة.تخيل أن هذا تكرر مليون مرة.

الآن خذ هذا الوضع،

الوضع 2

LINESTRING(0 0,1 1,2 2)
LINESTRING(1000000 1000000,1000001 10000001,1000002 1000002)
LINESTRING(2000000 2000000,2000001 20000001,2000002 2000002)
LINESTRING(3000000 3000000,3000001 30000001,3000002 3000002)

في المثال أعلاه:

  • أبعاد الخطوط مطابقة للحالة 1،
  • الخطوط لها نفس عدد النقاط
  • الخطوط لها أحجام متطابقة.

لكن،

  • الاختلاف هو أن الخطوط متباعدة بشكل كبير.

لماذا هذا مهم بالنسبة لي؟

السبب وراء طرح هذا السؤال هو أنني أريد معرفة ما إذا كان ينبغي لي إزالة أكبر قدر ممكن من الدقة من الأشكال الهندسية المدخلة الخاصة بي وتقليل كثافتها وقربها من بعضها البعض بقدر ما يمكن أن يوفره تطبيقي دون فقدان الدقة.

السؤال 2

هذا السؤال مشابه للسؤال الأول، ولكن بدلاً من أن يكون قريبًا مكانيًا من شكل هندسي آخر، هل يجب تقليل الأشكال نفسها إلى أصغر شكل ممكن لوصف ما يتطلبه التطبيق.

على سبيل المثال، إذا كنت سأستخدم فهرسًا مكانيًا على نوع بيانات هندسي لتوفير بيانات في التواريخ.إذا أردت تخزين نطاق زمني من تاريخين، فيمكنني استخدام نوع بيانات التاريخ والوقت في الخلية.ومع ذلك، ماذا لو أردت استخدام نوع هندسي، حتى أتمكن من تحويل النطاق الزمني عن طريق أخذ كل تاريخ على حدة وتحويله إلى unix_timestamp().

على سبيل المثال:

 Date("1st January 2011") to Timestamp =  1293861600
 Date("31st January 2011") to Timestamp =  1296453600

الآن، يمكنني إنشاء LINESTRING استنادًا إلى هذين العددين الصحيحين.

 LINESTRING(1293861600 0,1296453600 1)

إذا كان طلبي في الواقع مهتمًا فقط بالأيام، ولم يكن عدد الثواني مهمًا للنطاقات الزمنية على الإطلاق، فهل يجب علي إعادة تصميم الأشكال الهندسية الخاصة بي بحيث يتم تقليلها إلى أصغر حجم ممكن من أجل تلبية ما يحتاجون إليه.

فبدلاً من "1293861600"، سأستخدم "1293861600" / (3600 * 24)، والذي يصادف أنه "14975.25".

هل يستطيع أحد المساعدة في سد هذه الفجوات؟

هل كانت مفيدة؟

المحلول

عند إدخال إدخال جديد، يقوم المحرك باختيار MBR والتي سيتم تمديدها إلى الحد الأدنى.

من خلال "الحد الأدنى الممتد"، يمكن أن يعني المحرك إما "امتداد المنطقة" أو "امتداد المحيط"، حيث يكون الأول هو الافتراضي في MySQL.

هذا يعني أنه طالما أن العقد الخاصة بك لها مساحة غير صفرية، فإن أحجامها المطلقة لا تهم:الأكبر MBRتظل أكبر وتظل العقد الأصغر حجمًا أصغر، وفي النهاية ستنتهي جميع العقد بنفس الطريقة MBRس

قد تهمك هذه المقالات:

أما بالنسبة للكثافة MBR يتم إعادة حسابها عند تقسيم الصفحات، وهناك احتمال كبير أن يتم نقل جميع النقاط البعيدة جدًا عن المجموعة الرئيسية بعيدًا عند التقسيم الأول إلى مكانها الخاص MBR.سيكون كبيرًا ولكنه سيكون والدًا لجميع النقاط البارزة في تكرارات قليلة.

سيؤدي ذلك إلى تقليل وقت البحث عن النقاط المعلقة وزيادة وقت البحث عن النقاط العنقودية بمقدار صفحة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top