בדף הזה מוסבר על התכונות של אינדקסים משניים ושל חיפוש.
כשמתלבטים בין אינדקסים של חיפוש לבין אינדקסים משניים, חשוב לזכור שאינדקסים של חיפוש צריכים להיות ברירת המחדל לתרחישי שימוש של חיפוש טקסט מלא, ואינדקסים משניים צריכים להיות ברירת המחדל לכל שאר המקרים. בטבלה הבאה מתואר מתי כדאי להשתמש בכל סוג של אינדקס.
| תכונה | אינדקס משני | אינדקס החיפוש |
|---|---|---|
| סדר מיון | האינדקס ממוין לפי כל העמודות של מפתח האינדקס | אפשר למיין את אינדקס החיפוש לפי שתי עמודות מסוג INT64 לכל היותר, שהמשתמש שולט בהן. |
| מערכים | אי אפשר להשתמש בערכים מסוג מערכים כמפתחות באינדקסים משניים. | אינדקסים של חיפוש תומכים באינדקסים של מערכים. כל הטוקנים של מסמך נמצאים באותו פיצול. כתוצאה מכך, עסקאות שמשנות שורה אחת בלבד נכתבות רק לפיצול אינדקס אחד. |
| JSON/JSONB | אי אפשר להשתמש בערכי JSON כמפתחות באינדקסים משניים. | אינדקסים של חיפוש תומכים באינדוקס של ערכי JSON. |
| חיפושים | חיפוש לפי מפתח אינדקס צריך לגשת רק לפיצול אחד | בדרך כלל, שאילתות שמשתמשות באינדקס חיפוש צריכות לקרוא מכל הפיצולים של מחיצה נתונה. החריג היחיד הוא התאמת תבניות top-k. |
| הוספה לאינדקס של עמודות מרובות | אינדקסים משניים יכולים לכלול כמה עמודות מפתח. כדי שהביצוע יהיה יעיל, השאילתות צריכות לחפש נתונים לפי הקידומת של עמודות מפתח האינדקס. | אפשר להוסיף כמה עמודות לאינדקסים של החיפוש. אפשר לציין בשאילתות ביטויים לוגיים מורכבים (חיבורים, הפרדות, שלילות) בכל קבוצת משנה של העמודות שנוספו לאינדקס, ועדיין להריץ אותן ביעילות |
| חיתוך של אינדקסים | משתמשים יכולים לשכתב את השאילתה כדי להצטרף לכמה אינדקסים משניים. | החיתוך של כמה עמודות עם אינדקס מיושם כצירוף מקומי יעיל בצורת זיגזג, ואחריו איחוד ממוזג מבוזר (שמשלב תוצאות מכל הפיצולים הרלוונטיים). |
| נתוני הקריאה | שאילתת SQL או Read API | שאילתת SQL |
בנוסף לסמנטיקה, התחביר של הצהרת DDL ליצירת אינדקס חיפוש שונה מהתחביר של DDL ליצירת אינדקס משני:
- עמודות עם אינדקס מוגדרות בנפרד מסדר המיון באינדקס החיפוש.
- אין חשיבות לסדר העמודות
TOKENLISTבסעיףONשל ההצהרהCREATE SEARCH INDEX.