Middle+
Кога пълното сканиране на набора от данни е по-ефективно от достъпа по индекс?
sobes.tech AI
Отговор от AI
Когато процентът на записите, които трябва да бъдат обработени, е достатъчно висок (например, повече от 10-20%), така че разходите за търсене в индекса и четене на отделни блокове данни да надхвърлят предимствата.
Други случаи:
- Липса на подходящ индекс: Ако няма индекс, който покрива филтриращите полета или предоставя по-бърз достъп до данните от пълното сканиране.
- Несиметрично разпределение на данните (skew): Ако индексното поле има ниска кардиналност и голяма част от данните са концентрирани в малък брой стойности, сканирането може да бъде по-бързо, отколкото преминаването през много листа на индекса с еднакви стойности.
- Малък набор от данни: За малки таблици разходите за поддръжка и използване на индекс могат да бъдат по-високи от ползите.
- Последователно четене: Пълното сканиране обикновено включва последователно четене от диска, което може да бъде по-бързо, отколкото случайно четене при достъп чрез индекс, особено на HDD.
- Голям обем данни в ред: Ако всеки ред съдържа голям обем данни, четенето на цял набор от данни наведнъж може да е по-ефективно, отколкото многократно достъпване до диска за получаване на отделни редове чрез индекс.
Пример, когато пълното сканиране може да бъде по-ефективно:
// Прост SELECT * върху таблица с малко редове.
SELECT *
FROM small_table;
// Запитване с филтър, който засяга повечето редове
SELECT *
FROM large_table
WHERE status = 'processed'; // Ако повечето редове имат статус 'processed'