דילוג לתוכן המרכזי
מודול 10 · שיעור 1 מתוך 437/57 בקורס~15 min
שיעורי מודול (1/4)

אינדקסים ועצי B

איך מסד נתונים יכול למצוא רשומה אחת בין מיליוני שורות בשברירי שנייה?

כברירת מחדל, כאשר אנו שואלים את SELECT * FROM customers WHERE city = 'Milano', Postgres צריך לבצע סריקה רציפה: הוא קורא פיזית את כל הטבלה מדיסק שורה אחר שורה, ומשווה כל עיר עם "מילאנו". כאשר טבלה מכילה מיליוני שיאים, התהליך הזה משבש את הביצועים.

התשובה המבנית העיקרית לצווארי הבקבוק הללו היא אינדקסים.

אינדקסים (B-Trees)

אינדקסים פועלים בדיוק כמו האינדקס האנליטי בחלק האחורי של ספר גדול. במקום לקרוא את הספר כולו כדי למצוא היכן הוא מדבר על "מילאנו", אנו מחפשים את העמודים האחוריים שבהם המילה "מילאנו" מפנה אותנו אל [p. 45, 114, 230]. מאגרי מידע, מאחורי הקלעים, בונים את מבנה הנתונים הנפרד והקומפקטי הזה (לעיתים קרובות "B-Tree") מסודר לפי העמודה או העמודות המדוברות, המכילים מצביעים ישירים לאחסון הפיזי של השורות התואמות.

SQL
-- Creare un indice semplice
CREATE INDEX idx_customers_city ON customers(city);

פעולה יחידה זו מפעילה את מנוע Postgres, אשר יחלץ ויוסיף את כל הערכים city ברקע. לאחר השלמתו, כל SELECT ... WHERE city = '...' עוקבות יטוסו!

מפתחות עיקריים וייחודיות

האם ידעת שהמפתח הראשי (PRIMARY KEY) וכללי המפתח UNIQUE משתמשים בסתר באינדקסים מתחת למכסה המנוע? מכיוון שה-DB חייב להבטיח שדוא"ל או מזהה לעולם לא ישוכפלו בעת הוספת או שינוי שורות, PostgreSQL יוצר אוטומטית אינדקס B-Tree מרומז מעליהם: כך בדיקות הייחודיות נמשכות מיקרו-שניות.

זו הסיבה שהצטרפות בשדה ID היא בעלת ביצועים מדהימים.

הורדת מדד

אם אתה מבין ששאילתות כבדות השתנו ולעולם לא עיין באינדקס, חכם להרוס אותו ולתפוס מחדש מקום חיוני:

SQL
DROP INDEX idx_customers_city;

התור שלך

פעילות גופנית#sql.m10.l1.e1
ניסיונות: 0טוען...

במסחר האלקטרוני שלנו אנו מבחינים באמצעות לוחות מחוונים שאנו מסננים לעיתים קרובות לקוחות לפי לאום (עמודת המדינה בלקוחות). \nצור אינדקס בסיס חדש בעמודת המדינה וקרא לו 'idx_customers_country'.

טוען עורך...
הצג רמז

השתמש ב-CREATE INDEX index_name ON table_name(column_name);

הפתרון זמין לאחר 3 ניסיונות

חקר אינדקסים ייחודיים משניים

פעילות גופנית#sql.m10.l1.e2
ניסיונות: 0טוען...

ניתן להשתמש באינדקס B-Tree גם כדי לדמות אילוץ UNIQUE בזמן היצירה ולהאיץ חיפושים, תוך הפיכת הכוונה הלוגית למפורשת ואכיפה.\n\nצור אינדקס חדש שבו אתה מצהיר על מילת המפתח UNIQUE. הגדירו את זה כך שהוא יחסום כל הרשמה לא רצויה כפולה ממשתמשים אחרים, ותכפה ייחוד בעמודת 'אימייל' של 'לקוחות', ותן שם 'idx_unique_email_customer'.

טוען עורך...
הצג רמז

כתוב CREATE UNIQUE INDEX index_name ON טבלה (עמודה);

הפתרון זמין לאחר 3 ניסיונות