سؤال

من المعلومات التي يمكنني العثور عليها، كلاهما يحلان نفس المشكلات - المزيد من العمليات الباطنية مثل احتواء المصفوفة والتقاطع (&&، @>، <@، إلخ).ومع ذلك سأكون مهتمًا بالنصيحة حول متى يجب استخدام أحدهما أو الآخر (أو ربما لا).
ال وثائق PostgreSQL لديه بعض المعلومات حول هذا:

  • تعد عمليات البحث عن فهرس GIN أسرع بثلاث مرات تقريبًا من GiST
  • يستغرق إنشاء فهارس GIN وقتًا أطول بثلاث مرات تقريبًا من GiST
  • تعد فهارس GIN أبطأ بحوالي عشر مرات في التحديث من GiST
  • فهارس GIN أكبر مرتين إلى ثلاث مرات من GiST

ومع ذلك، سأكون مهتمًا بشكل خاص بمعرفة ما إذا كان هناك تأثير على الأداء عندما تبدأ حصة حجم الذاكرة في الفهرسة في الصغر (على سبيل المثال.يصبح حجم الفهرس أكبر بكثير من الذاكرة المتوفرة)؟لقد قيل لي على قناة #postgresql IRC أن GIN يحتاج إلى الاحتفاظ بكل الفهرس في الذاكرة، وإلا فلن يكون فعالاً، لأنه، على عكس B-Tree، لا يعرف أي جزء يجب قراءته من القرص من أجله. استفسار معين؟السؤال سيكون:هل هذا صحيح (لأنه قيل لي أيضًا عكس ذلك)؟هل لدى GIST نفس القيود؟هل هناك قيود أخرى يجب أن أكون على دراية بها أثناء استخدام إحدى خوارزميات الفهرسة هذه؟

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

المحلول

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

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