سؤال

لدي تعرض محدود ل DB واستخدم DB فقط كمبرمج تطبيق. أريد أن أعرف Clustered و Non clustered indexesوبعد أنا غوغشت وما وجدته هو:

يعد مؤشر متفاوت المسافات نوعا خاصا من الفهرس الذي يعرض على الطريقة التي يتم فيها تخزين السجلات في الجدول جسديا. لذلك يمكن أن يكون الجدول فهرس واحد متفاوت المسافات فقط. تحتوي عقد الأوراق من مؤشر متفاوت المسافات على صفحات البيانات. مؤشر غير مكتوح هو نوع خاص من الفهرس الذي لا يتطابق الترتيب المنطقي للمؤشر مع الترتيب المادي المخزن من الصفوف على القرص. لا تتكون عقدة ورقة من مؤشر غير مكتوح من صفحات البيانات. بدلا من ذلك، تحتوي العقد الورقة على صفوف مؤشر.

ما وجدته في ذلك كان ما هي الاختلافات بين مفهرف متفاوت المسافات.

يمكن للشخص أن يفسر هذا في اللغة الإنجليزية العادية؟

هل كانت مفيدة؟

المحلول

مع فهرس متفاوت المسافات يتم تخزين الصفوف جسديا على القرص بنفس الترتيب مثل الفهرس. لذلك، يمكن أن يكون هناك فهرس واحد متفاوت المسافات.

مع فهرس غير متفاوت المسافات، توجد قائمة ثانية تحتوي على مؤشرات إلى الصفوف المادية. يمكنك الحصول على العديد من المؤشرات غير المتراكبة، على الرغم من أن كل فهرس جديد سيزيد من الوقت الذي يستغرقه كتابة سجلات جديدة.

من الأسرع بشكل عام القراءة من مؤشر متفاوت المسافات إذا كنت ترغب في العودة جميع الأعمدة. ليس عليك الذهاب أولا إلى الفهرس ثم إلى الجدول.

الكتابة إلى جدول مع مؤشر متفاوت المسافات يمكن أن يكون أبطأ، إذا كانت هناك حاجة لإعادة ترتيب البيانات.

نصائح أخرى

يعني مؤشر متفاوت المسافات أنك تخبر قاعدة البيانات لتخزين القيم الوثيقة بالقرب من بعضها البعض على القرص. هذا لديه فائدة من المسح السريع / استرجاع السجلات التي تندرج في نطاق بعض قيم الفهرس المتراكبة.

على سبيل المثال، لديك جدولان وعملائك والطلب:

Customer
----------
ID
Name
Address

Order
----------
ID
CustomerID
Price

إذا كنت ترغب في استرداد جميع طلبات العملاء الخاصة بسرعة، فقد ترغب في إنشاء فهرس متفاوت المسافات على عمود "Customer CustomerID" من جدول الطلب. وبهذه الطريقة سيتم تخزين السجلات التي تحتوي على نفس CustomerId فعليا بالقرب من بعضها البعض على القرص (المسافات) التي تسرع استرجاعها.

PS من الواضح أن الفهرس على CustomerID لن يكون فريدا من نوعه، لذلك تحتاج إما إلى إضافة حقل ثان إلى الفهرس أو السماح لقاعدة البيانات بذلك من أجلك ولكن هذه قصة أخرى.

فيما يتعلق فهارس متعددة. يمكنك الحصول على فهرس واحد متفاوت المسافات لكل طاولة فقط لأن هذا يحدد كيفية ترتيب البيانات جسديا. إذا كنت ترغب في تشبيه، تخيل غرفة كبيرة مع العديد من الطاولات فيها. يمكنك إما وضع هذه الجداول لتشكيل عدة صفوف أو سحبها معا لتشكيل جدول مؤتمر كبير، ولكن ليس كلا الاتجاهين في نفس الوقت. يمكن أن يكون لدى الجدول فهارس أخرى، فسوف يشير بعد ذلك إلى الإدخالات في الفهرس المتراكب الذي سيقول في دوره أخيرا أين يمكن العثور على البيانات الفعلية.

في SQL Server Folded Storage تم تنظيم كل من الفهارس المتفاوتة وغير المكتوبة بأشجار B.

enter image description here

(مصدر الصورة)

الفرق الرئيسي بين الفهارس المسافات المستفوقة والفهارس غير المتراكبة هو أن مستوى ورقة الفهرس المتراكب يكون الطاولة. هذا له اثنين من الآثار.

  1. تحتوي الصفوف على صفحات ورقة الفهرس المسافات دائما شيئا ما لكل أعمدة من (غير متناثر) في الجدول (إما القيمة، أو مؤشر إلى القيمة الفعلية).
  2. الفهرس المتراكب هو النسخة الأساسية من الجدول.

الفهارس غير المتراكبة يمكن أن تفعل أيضا نقطة 1 باستخدام INCLUDE يتضمن جملة (نظرا لأن SQL Server 2005) لتشمل كافة أعمدة غير أساسية ولكنها تمثيلات ثانوية وهناك دائما نسخة أخرى من البيانات حولها (الجدول نفسه).

CREATE TABLE T
(
A INT,
B INT,
C INT,
D INT
)

CREATE UNIQUE CLUSTERED INDEX ci ON T(A,B)
CREATE UNIQUE NONCLUSTERED INDEX nci ON T(A,B) INCLUDE (C,D)

الفهارس أعلاه سيكون متطابقين تقريبا. مع صفحات مؤشر المستوى العلوي تحتوي على قيم للأعمدة الرئيسية A,B وصفحات مستوى ورقة تحتوي A,B,C,D

يمكن أن يكون هناك فهرس واحد متفاوت المسافات لكل طاولة، لأن صفوف البيانات يمكن فرزها في أمر واحد فقط.

الاقتباس أعلاه من كتب SQL Server عبر الإنترنت يسبب ارتباك كبير

في رأيي سيكون أفضل بكثير صياغة كما.

يمكن أن يكون هناك فهرس واحد فقط لكل طاولة، لأن صفوف مستوى ورقة الفهرس المسافات نكون صفوف الجدول.

الكتب Online Quote غير صحيحة ولكن يجب أن تكون واضحا أن "الفرز" لكل من المؤشرات غير المتراكبة والمتراكبة غير المنطقية وليس المادية. إذا قرأت الصفحات على مستوى الأوراق باتباع القائمة المرتبطة وقراءة الصفوف الموجودة في الصفحة في طلب صفيف الفتحات، فستقرأ صفوف الفهرس في الترتيب الفرز ولكنه قد لا يتم فرز الصفحات جسديا. الاعتقاد الشائع أنه مع فهرس متفاوت المسافات يتم تخزين الصفوف دائما جسديا على القرص بنفس الترتيب مثل الفهرس مفتاح هو زائف.

سيكون هذا تنفيذ سخيف. على سبيل المثال، إذا تم إدخال صف في منتصف جدول SQL Server 4 جيجابايت ليس يجب عليك نسخ 2 جيجابايت من البيانات لأعلى في الملف لإفساح المجال للصف المدرج حديثا.

بدلا من ذلك يحدث تقسيم الصفحة. كل صفحة على مستوى ورقة كلا من الفهارس المسافات غير المستفوقة وغير المستوة لها العنوان (File:Page) من الصفحة التالية والسابقة في الترتيب الرئيسي المنطقي. هذه الصفحات لا تحتاج إلى أن تكون غير متجاورة أو في ترتيب رئيسي.

قد تكون سلسلة الصفحات المرتبطة 1:2000 <-> 1:157 <-> 1:7053

عند حدوث تقسيم صفحة يتم تخصيص صفحة جديدة من أي مكان في مجموعة FileGroup (من أي مدى مختلط، أو إلى حد صغير، أو مدى موحدة غير فارغ ينتمي إلى هذا الكائن أو إلى حد موحد مخصص حديثا). قد لا يكون هذا حتى في نفس الملف إذا كانت مجموعة الملفات تحتوي على أكثر من واحد.

الدرجة التي يختلف الترتيب المنطقي والتداول عن النسخة المادية المثالية درجة تجزئة منطقية.

في قاعدة بيانات تم إنشاؤها حديثا مع ملف واحد ركض ما يلي.

CREATE TABLE T
  (
     X TINYINT NOT NULL,
     Y CHAR(3000) NULL
  );

CREATE CLUSTERED INDEX ix
  ON T(X);

GO

--Insert 100 rows with values 1 - 100 in random order
DECLARE @C1 AS CURSOR,
        @X  AS INT

SET @C1 = CURSOR FAST_FORWARD
FOR SELECT number
    FROM   master..spt_values
    WHERE  type = 'P'
           AND number BETWEEN 1 AND 100
    ORDER  BY CRYPT_GEN_RANDOM(4)

OPEN @C1;

FETCH NEXT FROM @C1 INTO @X;

WHILE @@FETCH_STATUS = 0
  BEGIN
      INSERT INTO T (X)
      VALUES        (@X);

      FETCH NEXT FROM @C1 INTO @X;
  END

ثم فحص تخطيط الصفحة مع

SELECT page_id,
       X,
       geometry::Point(page_id, X, 0).STBuffer(1)
FROM   T
       CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )
ORDER  BY page_id

كانت النتائج في كل مكان. كان الصف الأول في الترتيب الرئيسي (مع القيمة 1 - يتم تسليط الضوء على السهم أدناه) على الصفحة الفعلية تقريبا.

enter image description here

يمكن تخفيض تجزئة أو إزالتها عن طريق إعادة بناء أو إعادة تنظيم الفهرس لزيادة الارتباط بين الترتيب المنطقي والنظام المادي.

بعد تشغيل

ALTER INDEX ix ON T REBUILD;

حصلت على ما يلي

enter image description here

إذا كان الجدول ليس لديه فهرس متفاوت المسافات يسمى كومة.

يمكن بناء الفهارس غير المتراكبة على كومة كومة أو فهرس متفاوت المسافات. تحتوي دائما على محدد موقع الصف إلى الجدول الأساسي. في حالة وجود كومة هذا هو معرف صف مادي (تخلص) وتتكون من ثلاثة مكونات (ملف: صفحة: فتحة). في حالة فهرس متفاوت المسافات، يكون محدد الموقع منطقي (مفتاح الفهرس المسافات المتوفرة).

بالنسبة للحالة الأخيرة إذا كان الفهرس غير المتراكب بالفعل يتضمن بشكل طبيعي عمود (أسماء) CI الرئيسية إما كأعمدة NCI الرئيسية أو INCLUDE-d أعمدة ثم لا يتم إضافة شيء. وإلا فإن عمود (S) مفتاح CI المفقود يضاف بصمت إلى NCI.

يضمن SQL Server دائما أن الأعمدة الرئيسية فريدة من نوعها لكلا النوعين من الفهرس. الآلية التي يتم بها فرض ذلك من أجل الفهارس غير المعلنة أنها تختلف فريدة من نوعها بين نوعين الفهرستين.

فهارس متفاوت المسافات تحصل على uniquifier تمت إضافة أي صفوف ذات قيم رئيسية تكرر صف حالي. هذا مجرد عدد صحيح تصاعدي.

بالنسبة للمهارس غير المتراكبة غير المعلنة، لم يتم الإعلان عنها كخادم SQL فريد من نوعه يضيف بصمت محدد صف الصف إلى مفتاح الفهرس غير المتراكب. ينطبق هذا على جميع الصفوف، وليس فقط تلك التي هي في الواقع تكرارات.

كما يتم استخدام تسمية غير متفاوت المسافات غير المتراكبة في مؤشرات مخزن الأعمدة. الورقة التحسينات إلى مخازن عمود SQL Server تنص على

على الرغم من أن بيانات متجر العمود ليست "متفاوتة" في أي مفتاح حقا، فقد قررنا الاحتفاظ باتفاقية SQL Server التقليدية للإشارة إلى الفهرس الأساسي كنسخة مفككة.

أدرك أن هذا سؤال قديم للغاية، لكنني اعتقدت أنني سأقدم تشبيه للمساعدة في توضيح الإجابات الجميلة أعلاه.

مؤشر متفاوت المسافات

إذا كنت تمشي إلى مكتبة عامة، فستجد أن الكتب يتم ترتيبها جميعا بترتيب معين (على الأرجح النظام العشري Dewey أو DDS). هذا يتوافق مع "مؤشر مجمعات" الكتب. إذا كان DDS # للحجز الذي تريده كان 005.7565 F736s, ، سوف تبدأ من خلال تحديد موقع صف أرفف الأرفف التي تحمل المسمى 001-099 أو شيء من هذا القبيل. (تتوافق علامة EndCap هذه في نهاية المكدس مع "عقدة متوسطة" في الفهرس.) في النهاية ستحتقل إلى الرف المحدد المسمى 005.7450 - 005.7600, ، ثم سوف تفحص حتى وجدت الكتاب مع DDS # المحدد، وفي هذه النقطة لقد وجدت كتابك.

مؤشر غير متفاوت المسافات

ولكن إذا لم تدخل إلى المكتبة باستخدام DDS # من كتابك المحفوظات، فستحتاج إلى مؤشر ثان لمساعدتك. في الأيام العجوز، ستجد في مقدمة مكتبة مكتب أدراج رائع يعرف باسم "كتالوج البطاقة". في ذلك كانت الآلاف من بطاقات 3X5 - واحدة لكل كتاب، مرتبة حسب الطلب الأبجدي (حسب العنوان، ربما). هذا يتوافق مع "مؤشر غير متفروح". وبعد تم تنظيم كتالوجات البطاقات هذه في هيكل هرمي، بحيث يتم تصنيف كل درج مع مجموعة البطاقات التي تحتوي عليها (Ka - Kl, ، علي سبيل المثال؛ أي، العقدة الوسيطة "). مرة أخرى، ستحمل حتى وجدت كتابك، ولكن في هذه الحالة، بمجرد العثور عليها (أي "عقدة ورقة")، ليس لديك كتاب نفسه، ولكن فقط بطاقة مع فهرس رقم (DDS #) الذي يمكنك العثور عليه الكتاب الفعلي في الفهرس المسافات.

بالطبع، لا شيء سوف يمنع أمين مكتبة من نسخ جميع البطاقات وفرزها بترتيب مختلف في كتالوج بطاقة منفصلة. (عادة ما كانت هناك نوعان من هذه الكتالوجات على الأقل: واحد فرزه اسم المؤلف، وواحد حسب العنوان.) من حيث المبدأ، يمكن أن يكون لديك أكبر عدد ممكن من هذه الفهارس "غير المتراكبة" كما تريد.

ابحث عن بعض خصائص الفهارس المتفاوت المسافات وغير المتراكبة:

فهارس مفكهة

  1. الفهارس المسافات المستفيدة هي فهارس تحدد الصفوف بشكل فريد في جدول SQL.
  2. كل طاولة يمكن أن يكون بالضبط مؤشر واحد متفاوت المسافات.
  3. يمكنك إنشاء فهرس متفاوت المسافات يغطي أكثر من عمود واحد. علي سبيل المثال: create Index index_name(col1, col2, col.....).
  4. بشكل افتراضي، يحتوي العمود ذو المفتاح الأساسي بالفعل على فهرس متفاوت المسافات.

الفهارس غير المتراكبة

  1. الفهارس غير المتراكبة تشبه الفهارس البسيطة. يتم استخدامها للتو لسريع استرجاع البيانات. لست متأكدا من وجود بيانات فريدة من نوعها.

ستكون القاعدة البسيطة للغاية وغير تقنية الإبهام هي أن الفهارس المستفوقة عادة ما تستخدم في المفتاح الأساسي (أو، على الأقل، عمود فريد) وتستخدم غير متفاوت المسافات في المواقف الأخرى (ربما مفتاح أجنبي) وبعد في الواقع، سيتم إنشاء SQL Server افتراضيا فهرس متفاوت المسافات على عمود (أعمدة) المفاتيح الأساسية. نظرا لأنك ستعمل تعلمت، فإن الفهرس المستقيم يتعلق بالطريقة التي يتم فيها فرز البيانات جسديا على القرص، مما يعني أنه خيار جيد للغاية لمعظم المواقف.

مؤشر متفاوت المسافات

يحدد مؤشر متفاوت المسافات الترتيب المادي للبيانات في جدول. لهذا السبب يحتوي الجدول على فهرس واحد فقط.

  • "قاموس"لا حاجة لأي مؤشر آخر، مؤشرها بالفعل وفقا للكلمات

مؤشر غير مكتوح

مؤشر غير متفاوت المسافات هو مشابه إلى فهرس في كتاب. يتم تخزين البيانات في مكان واحد. يتم تخزين المؤشر في مكان آخر والفهرس يحتوي على مؤشرات إلى موقع التخزين في البيانات. لهذا السبب يحتوي الجدول على أكثر من 1 فهرس غير مكتوح.

  • "كيمياء كتاب "في Adaring، يوجد مؤشر منفصل لنقاط موقع الفصل، وفي" النهاية "، هناك مؤشر آخر يشير إلى الكلمات المشتركة الموقع

مؤشر متفاوت المسافات

فهارس مفكك فرز وتخزين صفوف البيانات في الجدول أو العرض بناء على قيمها الرئيسية. هذه هي الأعمدة المضمنة في تعريف الفهرس. يمكن أن يكون هناك فهرس واحد متفاوت المسافات لكل طاولة، لأن صفوف البيانات يمكن فرزها في أمر واحد فقط.

المرة الوحيدة يتم تخزين صفوف البيانات في جدول في الترتيب الفرز هو عندما يحتوي الجدول على فهرس متفاوت المسافات. عند وجود جدول فهرس متفاوت المسافات، يسمى الجدول جدول متفاوت المسافات. إذا لم يكن للمجدلة أي فهرس متفاوت المسافات، يتم تخزين صفوف البيانات في بنية غير مرضية تسمى كومة.

nonclustered.

المؤشرات غير المكتوبة لها هيكل منفصل عن صفوف البيانات. يحتوي مؤشر غير مكتوح على قيم مفتاح الفهرس غير المنكسر ولكل إدخال قيمة مفتاح يحتوي على مؤشر إلى صف البيانات يحتوي على القيمة الرئيسية. يسمى المؤشر من صف الفهرس في فهرس غير مفصل إلى صف بيانات محدد موقع صف. يعتمد بنية محدد موقع الصف على ما إذا كانت صفحات البيانات يتم تخزينها في كومة أو جدول متفاوت المسافات. للحصول على كومة، يوجد محدد موقع مؤشر إلى الصف. بالنسبة إلى جدول متفاوت المسافات، فإن محدد موقع الصف هو مفتاح الفهرس المسافات.

يمكنك إضافة أعمدة Nonkey إلى مستوى الورقة من الفهرس غير المركزي إلى حدود مفاتيح الفهرس الموجودة مباشرة، والتنفيذ المغطى بالكامل، المفهرس، الاستعلامات. لمزيد من المعلومات، راجع إنشاء فهارس مع أعمدة مضمنة. للحصول على تفاصيل حول حدود مفاتيح الفهرس، انظر الحد الأقصى لمواصفات السعة لخادم SQL.

مرجع: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-noclustered-indexes-described.

مؤشر مفكك:يؤدي قيد المفتاح الأساسي لإنشاء فهرس متفاوت المسافات تلقائيا في حالة عدم وجود فهرس متفاوت المسافات موجود بالفعل على الطاولة. يمكن تخزين البيانات الفعلية لمؤشر المسافات المتوفرة عند مستوى الأوراق للفهرس.

مؤشر غير متجمع:لا يتم العثور مباشرة على البيانات الفعلية لمؤشر غير متفاوت المسافات في عقدة الأوراق، بدلا من ذلك اتخاذ خطوة إضافية للعثور عليها لأنه يحتوي على قيم فقط من مواقع الصف التي يشير إلى البيانات الفعلية. لا يمكن فرز مؤشر غير متفاوت المسافات كمؤشر متفاوت المسافات. يمكن أن يكون هناك العديد من الفهارس غير المتراكبة لكل جدول، فعلا ذلك يعتمد على إصدار SQL Server الذي نستخدمه. يتيح SQL Server 2005 SQL Server 2005 على مدار 249 فهارس غير متفاوت المسافات ولإصدارات أعلاه مثل 2008، 2016، فإنها تسمح ب 999 فهارس غير متجمعة لكل جدول.

اسمحوا لي أن أقدم تعريف كتابي على "مؤشر التجمعات"، والذي مأخوذ من 15.6.1 من أنظمة قاعدة البيانات: الكتاب الكامل:

قد نحدث أيضا مؤشرات التجميع, ، والتي هي الفهارس في سمة أو سمات بحيث تظهر جميع tuples ذات قيمة ثابتة لمفتاح البحث لهذا الفهرس تقريبا كحكمات قليلة كما يمكن أن تحملها.

لفهم التعريف، دعنا نلقي نظرة على المثال 15.10 يوفره الكتاب المدرسي:

علاقة R(a,b) التي يتم فرزها في السمة a وتخزينها في هذا النظام، معبأة في كتل، هو بالتأكيد clusterd. فهرس على a هو مؤشر التجميع، لأنه معين معين a-Value A1، كل tuples مع هذه القيمة ل a هي متتالية. وبالتالي تظهر معبأة في كتل، وذلك ربما بالنسبة للكتل الأولى والأخيرة التي تحتوي a-Value A1، كما هو مقترح في الشكل 15.14. ومع ذلك، من غير المرجح أن يكون الفهرس الموجود على B، منذ tuples مع ثابت bسيتم نشر -Value في جميع أنحاء الملف ما لم تكن قيم a و b ترتبط ارتباطا وثيقا.

Fig 15.14

لاحظ أن التعريف لا يفرض كتل البيانات يجب أن تكون متجاورة على القرص؛ يقول فقط tuples مع مفتاح البحث معبأة في عدد قليل من كتل البيانات قدر الإمكان.

مفهوم ذو صلة هو العلاقة المستفوقة. وبعد العلاقة "متفاوتة" إذا تم تعبئة TUPLES بها تقريبا كحكمات قليلة كما قد تعقد هذه tuples. بمعنى آخر، من منظور كتلة القرص، إذا كان يحتوي على Tuples من علاقات مختلفة، فلا يمكن تجميع هذه العلاقات (أي، هناك طريقة أكثر تعبئة لتخزين هذه العلاقات من خلال تبديل Tuples of Thoration من كتل القرص الأخرى مع tuples لا ينتمي إلى العلاقة في كتلة القرص الحالية). بوضوح، R(a,b) على سبيل المثال أعلاه متروقبة.

لتوصيل مفهومين معا، يمكن أن تحتوي العلاقة المتوفرة على فهرس تكتل وفهرس غير مكتوظ. ومع ذلك، بالنسبة للعلاقة غير المتراكبة، لا يمكن فهرس التجميع ما لم يتم بناء الفهرس على رأس المفتاح الأساسي للعلاقة.

يتم إرساء "الكتلة" ككلمة عبر جميع مستويات التجريد من جانب تخزين قاعدة البيانات (ثلاثة مستويات من التجريد: Tuples، Blocks، ملف). مفهوم يسمى "ملف متفاوت المسافات"، الذي يصف ما إذا كان الملف (تجريد لمجموعة من الكتل (كتل واحدة أو أكثر من كتل القرص)) يحتوي على tuples من علاقة واحدة أو علاقات مختلفة. لا يتعلق الأمر بمفهوم مؤشر التجميع كما هو على مستوى الملف.

ومع ذلك، بعض مادة التدريس يحب تحديد مؤشر المجموعات المستندة إلى تعريف الملف المسافات. هذين النوعين من التعريفات هي نفسها على مستوى العلاقة المستفوقة، بغض النظر عما إذا كانوا يحددون العلاقة المستفوقة من حيث كتلة قرص البيانات أو الملف. من الرابط في هذه الفقرة،

فهرس على السمة (S) A على ملف هو فهرس التجميع عندما: يتم تخزين جميع TUPLES مع قيمة السمة A = A بالتتابع (= متتابع) في ملف البيانات

تخزين Tuples على التوالي هو نفسه قول "Tuples معبأة في كتل قليلة تقريبا حيث يمكن أن تعقد هذه tuples" (مع اختلاف بسيط على واحد يتحدث عن الملف، والتحدث الآخر عن القرص). لذلك لأن تخزين Tuple على التوالي هو الطريق لتحقيق "معبأة في عدد قليل من الكتل التي يمكن أن تحمل هذه tuples".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top