sql هل من المنطقي فهرسة جدول مع عمود واحد فقط؟




tsql indexing (2)

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

أساسا، لماذا تكتب:

SELECT * FROM manycols M INNER JOIN singlecol s ON m.id = s.id WHERE s.id = 123

عندما يكون هذا هو:

SELECT * FROM manycols m WHERE m.id = 123

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

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

يبدو أن هناك ربما طريقة أخرى للقيام بما تحتاجه أن الخنادق هذا الجدول عمود واحد تماما

https://code.i-harness.com

وأتساءل عما إذا كان من المنطقي لفهرسة الجدول، الذي يحتوي على عمود واحد فقط؟ سيتم ملء الجدول مع 100 أو 1000 من السجلات، وسوف تستخدم للانضمام إلى آخر (جدول أكبر) من أجل تصفية سجلاتها.

شكرا لكم!


نعم و لا. ربما يكون الفهرس الواضح غير منطقي. ومع ذلك، يتم تحديد العمود واحد primary key كثير من الأحيان (على افتراض أنه لا NULL وفريدة من نوعها).

هذا هو في الواقع ممارسة شائعة. ليس من غير المألوف بالنسبة لي إنشاء جداول الاستبعاد، مع منطق مثل:

from . . . 
where not exists (select 1 from exclusion_table et where et.id = ?.id)

يمكن لمؤشر المفتاح الأساسي تسريع هذا الاستعلام.

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





sql-server-2012