יצירת טבלה ללא מפתח ראשי - הכצעקתה?!
-
דווקא מסתבר שכמו שארכירטקט אומר שיש כתובת כלשהי לכל שורה ממילא.
ולמה זה מסתבר כי זה פותר את הבעיה של חורים במסד נתונים אחרי שנמחקו שורות.נכון שיש כתובת לכל שורה אבל הכתובת משתנה כאשר השורה מועברת ממקום למקום בדיסק, אז מה הכתובת עוזרת לך? אנו מחפשים מזהה קבוע לכל שורה, לכל אורך חיי השורה.
פורסם במקור בפורום CODE613 ב24/03/2017 15:35 (+03:00)
-
בשיחה עם clickone ניסינו לעשות סדר בדברים:
- מפתח ראשי זה אכן לא כינוי לclustered index, וייתכן מפתח ראשי שאיננו אינדקס ולהפך
- בברירת מחדל מפתח ראשי הוא clustered index, ומפתח ראשי יכול להיות עמודה או כמה מכל סוג של נתונים
- המשמעות של מפתח ראשי ללא index היא סתם עמודה נוספת עם אילוץ יחודיות - בזבוז הן במקום והן בביצועים.
- המשמעות של clustered index היא הפיכת כל הטבלה מסוג heap לסוג clustered. הנתון עצמו של האינדקס כמעט לא תופס מקום כיון שהוא בלא"ה חלק מסידור הטבלה, מצד המקום הצדק כנראה עם ארכיטקט.
- בclustered index הסידור של השורות פיזית הוא לפי באינדקס.
- ללא הנ"ל הטבלה איננה מסודרת כלל (שמה heap table), ויש לזה יתרונות גם במהירות לפעמים - אז הכלל שאין לזה עלות לא נכון בכל מקרה.
מקורות:
http://stackoverflow.com/questions/15051869/relationship-of-primary-key-and-clustered-index
https://en.wikipedia.org/wiki/Unique_key
https://docs.microsoft.com/en-us/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes
https://www.mssqltips.com/sqlservertip/1254/clustered-tables-vs-heap-tables/
http://dba.stackexchange.com/questions/28370/what-are-valid-usage-scenarios-for-heap-tablesעברית
http://www.ildba.co.il/indexes-in-sql-server/
http://blogs.microsoft.co.il/gerireshef/2010/11/29/אינדקסים-וספריית-אוניברסיטת-חיפה/
http://blogs.microsoft.co.il/gerireshef/2014/03/20/lookup-לטבלה-heapclustered-index/פורסם במקור בפורום CODE613 ב26/03/2017 09:05 (+03:00)