sql >> Databáze >  >> RDS >> PostgreSQL

Pochopení bitmapových indexů v postgresql

Bitmapa stránek se vytváří dynamicky pro každý dotaz. Neukládá se do mezipaměti ani se znovu nepoužívá a na konci skenování indexu bitmapy se zahodí.

Nemá smysl vytvářet bitmapu stránky předem, protože její obsah závisí na predikátech dotazu .

Řekněme, že hledáte x=1 and y=2 . Na x máte indexy b-stromu a y . PostgreSQL nekombinuje x a y do bitmapy a poté bitmapu prohledejte. Skenuje index x pro adresy všech stránek s x=1 a vytvoří bitmapu se stránkami, které mohou obsahovat x=1 jsou pravdivé. Poté naskenuje y hledá adresy stránek, kde je y se může rovnat 2 , z toho vytvoří bitmapu. Pak je spojí AND, aby našli stránky, kde jsou obě x=1 a y=2 může být pravda. Nakonec tabulku prohledá sama, přečte pouze stránky, které mohou obsahovat kandidátské hodnoty, přečte každou stránku a ponechá pouze řádky, kde x=1 and y=2 .

Nyní, pokud hledáte něco jako předpřipravený index bitmap v mezipaměti, v PostgreSQL 9.5 existuje taková věc:indexy BRIN . Ty jsou určeny pro velmi velké tabulky a poskytují způsob, jak najít rozsahy tabulky, které lze přeskočit, protože je známo, že neobsahují požadovanou hodnotu.



  1. Vybírejte řádky, dokud nebude splněna podmínka

  2. Převeďte řádek SQL na sloupce

  3. Může rowCount() PDO po dotazu UPDATE zobrazit rozdíl mezi neprovedenými změnami a neexistujícím řádkem?

  4. Jak by měly být ip2long převedené IP uloženy v MySQL?