- انواع index ها در Postgres - Developer

Blogs

انواع index ها در Postgres

انواع مدل ایندکس گذاری

 

B-tree

Hash

GiST (Generalized Inverted Search Tree)

SP-GiST (Spaced Partition GiST)

GIN (Generalized Inverted Index)

BRIN (Block Range Indexes)

B-tree

در این مدل postgresSql  یک درخت self-balanced  ایجاد میکند. یعنی مرتب سازی انجام میدهد و قسمت مهم اینه که بالانس رو در طی عملیات های حذف سرچ یا وارد کردن داده حفظ میکند و باعث میشود سرعت عملیات اسکن افزایش یابد و علت ان این است که صفحات را بصورت خطی یا پشت سرهم اسکن نمیکنه. این روش زمانی خوب است که از اول جدول و فیلد هاشو داشته باشیم ,  طول فیلدها ثابت باشند ,  عملیات قرار است روی فیلد های زیادی اجرا بشود.

زمانی که از دستور create index  استفاده میکنیم posgresSql  به عنوان پیش فرض B-tree  رو انتخاب میکند.

 

create index test3 on public.customers using btree (name asc nulls first)

 

 

Hash

 

 سرعت lookup این مدل ایندکس خیلی سریع تر از B-Tree هست. ولی یه نکته منفی داره. اونم اینه که مورد استفاده اون محدود به عملگر = هست.

 

CREATE INDEX test4 ON public.customers USING HASH (email)

 

GiST

تو شرایطی که مقادیر ذخیره شده تو یه ستون overlap دارن ما از این مدل برای ایندکس گذاری استفاده می کنیم.

امکان اینکه ستونی با این ایندکس گذاری lossy  هست. یعنی اینکه امکان برگشت مقادیر اشتباه هست ولی این به معنی خروجی اشتباه از کوئری نیست.فقط باید دیتابیس بیشتر عملیات انجام بده تا خروجی درستی داشته باشد.

create index test5 ON public.customers using gist(name)

 

SP-GiST

داده های که بالانس نیستن non-balance رو با درخت های partitioned search ایندکس گذاری میکنن.

 

GIN

توی این مدل ایندکس گذاری، به هر واژه یه ایندکس داده میشه. تو یه لیست فشرده ایندکس هایmatching location ها ذکر شده. این متد ایندکس گذاری برای زمانی خوب هست که ما مقادیر مختلفی تو یه ستون داریم. یعنی data type اون ستون معمولا یکی از موارد زیر هست:

 

JSONB

Array

Range Types

hStore

مورد کاربردش وقتی هست که دنبال یه text خاص تو یه مشته داکیومنت   هستیم.

مثلا میخواهیم دنبال یک اسم مشتری تو جدول مشتریان باشیم و کاربر سه حرف اول رو وارد میکند و همه اون رکورد هایی که این سه کلمه را دارند برگردونده میشوند و نکته مهم این است که نوع ستون حتما باید از نوع tsvector  باشند.

 

BRIN

در اکثر موارد به جای SP-GiST میتونیم از این مدل ایندکس گذاری استفاده بکنیم. بهره وری این مدل ایندکس گذاری تو مواردی که datasets زیادی داریم خیلی بیشتر هست. در ضمن هزینه maintenance این مدل ایندکس گذاری از B-Tree خیلی کمتره.کاربرد این مدل ایندکس گذاری تو مواردی هست که مثل zip code و date. چونکه میتونیم از دیتا های unnecessary صرف نظر بکنیم.

create index test5  on public.customers  using brin(email)

00

More Blog Entries

0 Comments