W sql server jest tak. Są trzy metody skanów. 1) Table scan - gdy przeszukujemy tabelę nieklastrową (tzw. Heap - ja na to mówię kopiec, ale spotkałem się też ze stertą) bez indeksu lub po wartości niezindeksowanej w indeksie nieklastrowym. 2) Index scan (clustered) - zawsze jeżeli występuje indeks klastrowy, a wyszukanie jest po a) zakresie kluczy klastrowych/nieklastrowych (w tym nie zawsze jest to pewnik, o czym dalej) b) niezindeksowanej wartości w indeksie nieklastrowym. Innymi słowy jeżeli jest clustered index, nigdy nie wykona się table scan 3) Index seek - wyszukanie konretnej wartości z indeksu. Niekoniecznie musi istnieć jej unikalność. Optymalizator może oszacować, że taki wydłubywanie nawet kilkuset rodzynek z indeksu będzie korzystniejsze niż index scan. Pozyskiwanie danych. Jeżeli istnieje Index Scan lub dane są brane bezpośrednio z indeksu, taka metoda nie jest uwzględniana w execution plan. RID/Key lookup różnią się tylko istnieniem indeksu klastrowego. Jeżeli istnieje - metodą jest key (nawet jeżeli seek jest w indeksie nieklastrowym), w innym przypadku rid.
W sql server jest tak. Są trzy metody skanów. 1) Table scan - gdy przeszukujemy tabelę nieklastrową (tzw. Heap - ja na to mówię kopiec, ale spotkałem się też ze stertą) bez indeksu lub po wartości niezindeksowanej w indeksie nieklastrowym. 2) Index scan (clustered) - zawsze jeżeli występuje indeks klastrowy, a wyszukanie jest po a) zakresie kluczy klastrowych/nieklastrowych (w tym nie zawsze jest to pewnik, o czym dalej) b) niezindeksowanej wartości w indeksie nieklastrowym. Innymi słowy jeżeli jest clustered index, nigdy nie wykona się table scan 3) Index seek - wyszukanie konretnej wartości z indeksu. Niekoniecznie musi istnieć jej unikalność. Optymalizator może oszacować, że taki wydłubywanie nawet kilkuset rodzynek z indeksu będzie korzystniejsze niż index scan.
Pozyskiwanie danych. Jeżeli istnieje Index Scan lub dane są brane bezpośrednio z indeksu, taka metoda nie jest uwzględniana w execution plan. RID/Key lookup różnią się tylko istnieniem indeksu klastrowego. Jeżeli istnieje - metodą jest key (nawet jeżeli seek jest w indeksie nieklastrowym), w innym przypadku rid.
Dziękuję za bardzo cenny komentarz :)
#zasieg, Darku, mógł byś nagrać film o operatorach UNION/EXCEPT/INTERSECT?
Dodam do listy, nagram na pewno :)
Dokładnie jak z kredytem, można korzystać i nie wiedzieć jak działa :)
można - kto bogatemu zabroni :)
Dobry temat mordziaty
Hej, warto było wspomnieć o założenie indexu GIN, sporo osób używa LIKE w zapytaniach i może być to rozwiązanie na optymalizacje zapytań
trafna uwaga dzięki :)