אפשרויות האינדקסים ב PostgreSQL

אינדקסים פונקציונליים

אפשר לבנות אינדקס לא רק לפי השדה או שדות המרובים של הטבלה, אבל גם לפי הביטוי אשר תלוי בעריכם של השדות.

נניח, למשל,  שבטבלה t יש שדה f והרבה קריאות מהטבלה משתמשות בתנאי: אות הראשונה של f שווה ל"אות"

ניתן ליצור אינדקס:

CREATE INDEX f_name_first_idx ON t ((substr(f, 1, 1)));

לאחר מכן קריאה הבאה תשתמש באינדקס החדש:

SELECT * FROM t WHERE (f, 1, 1) = 'a';

אינדקסים חלקיים

אינדקס חלקי הוא אינדקס עם תנאי WHERE.

לדוגמה, נניח שיש לך טבלה t במסד הנתונים עם שדה בוליאני b. יש הרבה יותר רשומות איפה b = true, אבל יש יותר קריאות לטבלה אשר משתמשות בתנאי b = false.

ניתן ליצור אינדקס:

CREATE INDEX b_false ON t (id) WHERE NOT b;

לאחר מכן קריאה הבאה תשתמש באינדקס החדש:

SELECT * FROM t WHERE NOT b;

היתרון של הגישה זאת הוא שרשומות שאינן עונות לתנאי WHERE, פשוט לא מופיעים באינדקס.