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