Indeksy mają zalety (przyspieszają SELECT) i wady (spowalniają INSERT,zajmują miejsce). W sytuacji, kiedy na danej kolumnie wykonujemy operację SELECT dużo częściej, niż INSERT, wybór wydaje się oczywisty. Co jednak, gdy zawsze, bądź prawie Xzawsze po SELECT następuje INSERT? Czy korzyści płynące z szybszego przeszukiwania indeksowanej kolumny nie zostaną zmarnowane przez konieczność każdorazowego odtwarzania indeksu?
Kiedyś robiłem test na moim kompie na tabeli z ok 1 mln rekordów i pięcioma indeksami.
Select 5 wierszy z waruknkiem 'where ...' bez indeksów wykonywał się ok 150 ms , z indeksem poniżej 1 ms
Natomiast Insert bez indeksów - poniżej 1 ms , z indeksami 5-6 ms , a więc w testowanym przypadku warto stosować indeksy.
Silnik bazy to Firebird 2.5.4
Zależy od rodzaju użytego indeksu. Jednak co do zasady indeksy "robią dobrze" na tyle, że opóźnienia przy insertach są nieistotne.
Zależy ile masz danych i jaki to select, jaki indeks i jak bardzo przyspiesza ten select. Jeśli danych jest bardzo dużo, to będzie to działać na korzyść indeksu, bo indeksy często zmieniają złożoność wyszukiwania i np. z liniowej robią logarytmiczną lub stałą. Z drugiej strony narzut przy modyfikacjach jest stały, choć może też być znaczny i np. spowolnić insert kilkukrotnie, bo wymaga dodatkowego odczytu, dodatkowej synchronizacji, uderza w dysk w losowe miejsce itp. Ale raczej będzie mieć to znaczenie przy proporcjach 10000 insertów na jeden select, a nie 1:1.