Sobes.tech
Middle+

Кай вақтҳо сканкунии пурраи маҷмӯи додаҳо нисбат ба дастрасӣ тавассути индекс самараноктар аст?

sobes.tech AI

Ҷавоб аз AI

Когато процентът на записите, които трябва да бъдат обработени, е достатъчно висок (например, повече от 10-20%), така че разходите за търсене в индекса и четене на отделни блокове данни да надхвърлят предимствата.

Други случаи:

  • Липса на подходящ индекс: Ако няма индекс, който покрива филтриращите полета или предоставя по-бърз достъп до данните, отколкото пълното сканиране.
  • Несиметрично разпределение на данните (skew): Ако индексното поле има ниска кардиналност и голяма част от данните са концентрирани в малък брой стойности, сканирането може да бъде по-бързо, отколкото преминаването през много листа на индекса с еднакви стойности.
  • Малък набор от данни: За малки таблици разходите за поддръжка и използване на индекс могат да бъдат по-високи от ползите.
  • Последователно четене: Пълното сканиране обикновено включва последователно четене от диска, което може да бъде по-бързо, отколкото случайно четене при достъп чрез индекс, особено на HDD.
  • Голям обем данни в ред: Ако всеки ред съдържа голям обем данни, четенето на цял набор от данни наведнъж може да е по-ефективно, отколкото многократно достъпване до диска за получаване на отделни редове чрез индекс.

Пример, когато пълното сканиране може да бъде по-ефективно:

// Прост SELECT * върху таблица с малко редове.
SELECT *
FROM small_table;

// Запитване с филтър, който засяга повечето редове
SELECT *
FROM large_table
WHERE status = 'processed'; // Ако повечето редове имат статус 'processed'