ما الفرق بين أساليب مؤشر شجرة B-Tree و GIST (في postgresql)؟

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

سؤال

لقد كنت أعمل على تحسين قواعد بيانات Postgres الخاصة بي مؤخرا، وتقليديا، لقد استخدمت فقط مؤشرات B-Tree. ومع ذلك، رأيت أن الفهارس GIST SUPROPET فهارس متعددة الاستخدامات غير الفريدة، في وثائق Postgres 8.3.

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

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

المحلول

باختصار: مؤشرات B-Tree تؤدي بشكل أفضل، لكن فهارس GIST أكثر مرونة. عادة ما تريد فهارس B-Tree إذا كانوا سيعملون في نوع بياناتك. كان هناك وظيفة حديثة على قوائم PG حول أداء ضخمة تضرب لاستخدام فهارس GIST؛ من المتوقع أن تكون أبطأ من الأشجار B (مثل سعر المرونة)، ولكن ليس الذي - التي أبطأ بكثير ... العمل، كما قد تتوقع، مستمر.

من منشور من قبل توم لين, ، مطور postgresql الأساسي:

النقطة الرئيسية من GIST هي أن تكون قادرة على فهرسة الاستعلامات التي ببساطة لا تفحصها في BTREE. ... واحد من شأنه أن نتوقع تماما BTREE للتغلب على GIST للحالات الفهرسة BTREE. أعتقد أن النقطة المهمة هنا هي أن الفوز بعامل بضع مئات؛ هذا فظيع جدا، وقد يشير إلى بعض مشكلة التنفيذ.

نصائح أخرى

أساسا اليمين الجميع - BTREE هو الفهرس الافتراضي لأنه ينفذ جيدا. GIST هي الوحوش المختلفة إلى حد ما - إنه أكثر من "إطار" لكتابة أنواع الفهرس "من نوع الفهرس بمفرده. يجب عليك إضافة رمز مخصص (في الخادم) لاستخدامه، ولكن من ناحية أخرى - فهي مرنة للغاية.

بشكل عام - أنت لا تستخدم GIST ما لم تكن النمط الذي تستخدمه في استخدامك للقيام بذلك. مثال على أنواع البيانات التي تستخدم GIST: ltree (من contrib)، tsvector (contrib / tsearch حتى 8.2، في الأساسية منذ 8.3)، وغيرها.

هناك extenstion جيوغرافيك جيوغرافي سريع جيد جدا إلى postgresql - postgis (http://postgis.refractions.net/) الذي يستخدم GIST لأغراضه.

فهارس GIST هي ضيافة إلى حد ما، مما يعني أن DBMS يجب أن تتعامل مع الإيجابيات / السلبيات الخاطئة، أي:

الفهارس GIST خائفة لأن كل مستند ممثلة في الفهرس بموجب توقيع ثابت الطول. يتم إنشاء التوقيع من خلال التجزئة كل كلمة في بعض الكلمة في سلسلة عشوائية في سلسلة N-BIT، مع كل هذه البتات أو إد معا لإنتاج توقيع مستند N-BIT. عندما تكون كلمتين التجزئة لنفس موقف بت هناك ستكون هناك مباراة كاذبة. إذا كانت جميع الكلمات في الاستعلام لها تطابق (حقيقي أو خطأ)، فيجب استرجاع صف الجدول لمعرفة ما إذا كانت المباراة صحيحة. لا تملك B-Tree هذا السلوك، لذلك اعتمادا على البيانات التي تم فهرستها، قد يكون هناك بعض فرق الأداء بين الاثنين.

انظر لسلوك البحث عن النص http://www.postgresql.org/docs/8.3/static/textsearch-indexes.html. و http://www.postgresql.org/docs/8.3/static/indexes-types.html. لمقارنة الغرض العام.

GIST هي أكثر فهارس عامة. يمكنك استخدامها لأغراض أوسع أن تلك التي ستستخدمها مع B-Tree. بما في ذلك القدرة على بناء شجرة B باستخدام GIST.

أي: يمكنك استخدام GIST للفهرس على النقاط الجغرافية، أو المناطق الجغرافية، شيء لن تتمكن من القيام به بفهارس B-Tree، لأن الشيء الوحيد الذي يهم في شجرة B هو المفتاح (أو المفاتيح) هي الفهرسة.

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