| Indextípusok |
|---|
| Kiegyensúlyozott fa egyenlőség-, tartomány- és rendezett vizsgálatokhoz. A legtöbb adatbázisban alapértelmezett. | Használd =, <, >, BETWEEN, ORDER BY esetén. Hagyd ki full-text kereséshez. |
| Olyan index, amelynek levélszintje maga a tábla. A sorok kulcssorrendben tárolódnak. Táblánként egy. | Az InnoDB a primer kulcsra klaszterez. Az ezek nélküli SQL Server táblák heap-ek. |
| Külön struktúra, amely kulcsokat és egy, az alaptáblára mutató pointert tartalmaz. Táblánként sok. | Heap esetén row ID-t tárol. Clustered táblán a klaszterező kulcsot tárolja. |
| Hash tábla kizárólag egyenlőség-keresésekhez. Állandó idejű pontos egyezés. | Csak = műveletekhez használd; tartományhoz és rendezéshez B-tree kell. Az SQL Server memory-optimized hashéhez a sorszámhoz közeli bucket count kell. |
| Generalized Inverted Index. Értékeket rendel sorokhoz. Tömbökhöz és full-texthez készült. | Használd jsonb, tömbök, tsvector, trigram kereséshez. Lassabban épül, mint a B-tree. |
| Generalized Search Tree. Nem skalár típusokhoz és átfedés-lekérdezésekhez bővíthető. | Használd geometriai tartományokhoz, kNN-hez, kizárási megszorításokhoz. A pg_trgm gyorsítja a LIKE-ot. |
| Térbelisen particionált GiST. Radix- vagy quad-fákkal nem átfedő régiókra osztja az adatokat. | Használd pontokhoz, IP-prefixumokhoz és előtag-egyeztetéshez. Átfedés-lekérdezéshez nem; arra a GiST való. |
| Block Range Index. Blokk-tartományonként min/max-ot tárol. Parányi helyigény. | Nagy, fizikailag rendezett táblákon használd. Olcsó felépíteni, gyenge szelektivitás. |
| Oszlopszegmensekként tárolt index sorok helyett. Erős tömörítés, batch végrehajtás. | Sok soros, kevés oszlopos analitikai vizsgálatokhoz használd. Az egyetlen soros keresések lassúak. |
| Dedikált invertált szóindex a MySQL-ben és az SQL Serverben. Szöveges oszloponként épül. | Használd MATCH AGAINST vagy CONTAINS. A Postgres full-text helyette GIN-t használ tsvectoron. |
| Oracle index, amely distinct értékenként egy bitmappát tárol. Minden bit egy sort jelöl. | Alacsony kardinalitású oszlopokon használd olvasásintenzív raktárakban. Az egyidejű írások bitmappánként szerializálódnak. |
| DESC-ként deklarált indexoszlop. Az adott oszlop kulcsai fordított sorrendben tárolódnak. | Vegyes rendezésekhez kell, mint (a ASC, b DESC). A sima DESC rendezések a normál indexet visszafelé is ki tudják olvasni. |
| MySQL 8 index, amelyet az optimalizáló figyelmen kívül hagy. Minden íráskor továbbra is karban tartott. | Rejtsd el az indexet eldobás előtt, hogy felmérd a hatását. Tedd újra láthatóvá újraépítés nélkül. |
| Tervezés |
|---|
| Több oszlopos index. A vezető oszlopoknak meg kell egyezniük a lekérdezés szűrési sorrendjével. | Rendezd először egyenlőség, majd tartomány szerint. Két egyetlen oszlopos index nem pótol egy összetett indexet. |
| WHERE predikátumon épített index. Az SQL Server filtered indexnek hívja. Csak az egyező sorokat fedi. | Indexeld csak az active='t' sorokat. Felére csökkenti a méretet és az írási költséget. |
| Extra, nem kulcs oszlopokkal bővített B-tree. Az index-only scan elkerüli a heap-keresést. | Add hozzá a gyakran lekért oszlopokat INCLUDE-lal. Az index rendezhető marad. |
| Index, amely kikényszeríti a duplikátumok hiányát. Elutasítja az ütköző beszúrásokat. | Természetes kulcsokhoz és egy-az-egyhez megszorításokhoz használd. A UNIQUE NULL sok NULL-t megenged. |
| Az oszlopok függvényén, nem magán az oszlopokon épített index. | Indexeld a lower(email) vagy date_trunc('day', created_at) kifejezést. A lekérdezésnek pontosan ugyanezt a kifejezést kell használnia. |
| Operátorosztály. Meghatározza, hogyan hasonlít össze és tárol egy index egy oszlop típusát. | Állíts be varchar_pattern_ops-t a LIKE 'abc%'hez kis-/nagybetű-egységesítés nélkül. Az alapértékek egyenlőségre és tartományra valók. |
| Terv, amely csak az index oldalakból válaszolja meg a lekérdezést. A heap sosem kerül olvasásra. | Minden lekért oszlopnak az indexben vagy az INCLUDE listában kell lennie. A Vacuum naprakészen tartja a visibility mapet. |
| Az idegenkulcs-oszlopok nem kapnak automatikus indexet a hivatkozó táblán. | Indexeld minden FK oszlopot, amelyen joinolsz vagy törölsz. A kaszkádolt törlések index nélkül végigvizsgálják a gyerektáblát. |
| Karbantartás |
|---|
| Tervvizsgáló. Szekvenciális vizsgálatokat, indexválasztásokat, költségbecsléseket mutat. | Használd az EXPLAIN (ANALYZE, BUFFERS) alakot. A Seq Scan egy 10M soros táblán hiányzó indexet jelent. |
| Mintavételezi a tábla oszlopait, és planner-statisztikát épít. A hisztogramok irányítják az indexválasztást. | Futtatás tömeges betöltés után. Az elavult statisztikák seq scannt okoznak indexelt oszlopokon. |
| Minden index írási többletköltséget ad. Az insert, update, delete indexenként fizet. | Dobd el a nem használt indexeket. Kövesd a használatot a pg_stat_user_indexes-ben. |
| Postgres nézet indexenkénti használatról. A statisztika-nullázás óta számolja a vizsgálatokat és olvasott tuple-öket. | Szűrj idx_scan = 0-ra a nem használt indexek megtalálásához. Nullázd a számlálókat pg_stat_reset()-tel. |
| Olyan indexet épít, amely nem blokkolja az olvasást és az írást. Két táblavizsgálat kell hozzá. | Nem futtatható tranzakcióban. A sikertelen építés INVALID indexet hagy, amelyet el kell dobni. |
| Eltávolít egy indexet, és felszabadítja a tárolóját. Alapértelmezésben exkluzív zárat vesz fel. | Használj DROP INDEX CONCURRENTLY-t forgalmas táblákon. Ellenőrizd a használati statisztikát az eltávolítás előtt. |
| Újjáépíti a duzzadt indexet. Halott tuple-öktől visszanyer teret. | Használj REINDEX CONCURRENTLY-t élesben. Enélkül a zárak blokkolják az írást. |
| Halott tuple-ök és laprések, amelyek az MVCC táblákban és indexeikben halmozódnak. | Mérd pgstattuple-lal. Vacuum-olj gyakran; REINDEX-elj, amikor a halott tér dominál. |
| Az íráskor csomagolt lap százaléka. A szabad hely a későbbi update-eket fogadja. | Csökkentsd 70-90-re hot-update táblákon. A teli lapok page splitet kényszerítenek. |
| Fizikailag index szerint rendezve írja újra a táblát. Egyszeri művelet. | BRIN-nel párosítva rendezett blokkokat ad. A későbbi írások nem tartják fenn a sorrendet. |