Els índexs són una part fonamental de l'optimització de bases de dades. Ajuden a accelerar les consultes permetent un accés més ràpid a les dades. En aquest tema, aprendrem què són els índexs, com es creen, els diferents tipus d'índexs disponibles a PostgreSQL i les millors pràctiques per utilitzar-los.
Què és un índex?
Un índex és una estructura de dades que millora la velocitat de les operacions de recuperació de dades en una taula de base de dades. Els índexs es creen sobre una o més columnes d'una taula i permeten a PostgreSQL trobar les files més ràpidament.
Beneficis dels índexs:
- Millora del rendiment de les consultes: Les consultes que utilitzen columnes indexades són molt més ràpides.
- Reducció del temps de cerca: Els índexs redueixen el nombre de files que s'han de cercar per trobar les dades desitjades.
Desavantatges dels índexs:
- Espai d'emmagatzematge addicional: Els índexs ocupen espai addicional a la base de dades.
- Temps addicional d'inserció/actualització: Les operacions d'inserció, actualització i eliminació poden ser més lentes perquè els índexs s'han d'actualitzar.
Creant un índex
Per crear un índex en PostgreSQL, utilitzem la instrucció CREATE INDEX
. A continuació es mostra la sintaxi bàsica:
Exemple pràctic
Suposem que tenim una taula empleats
amb les següents columnes: id
, nom
, cognom
, departament
, sou
. Volem crear un índex sobre la columna departament
per accelerar les consultes que filtren per aquesta columna.
Tipus d'índexs
PostgreSQL ofereix diversos tipus d'índexs, cadascun amb els seus propis avantatges i usos específics.
Índex B-tree
Aquest és el tipus d'índex per defecte i és adequat per a la majoria de les situacions. És eficient per a operacions d'igualtat i rang.
Índex Hash
Els índexs hash són útils per a operacions d'igualtat, però no per a operacions de rang.
Índex GIN (Generalized Inverted Index)
Els índexs GIN són útils per a columnes que contenen dades complexes com arrays, JSONB, i text complet.
Índex GiST (Generalized Search Tree)
Els índexs GiST són útils per a dades geoespacials, text complet i altres tipus de dades personalitzades.
Millors pràctiques per utilitzar índexs
- Indexar columnes utilitzades en condicions de cerca: Les columnes que apareixen freqüentment en les clàusules
WHERE
,JOIN
iORDER BY
són bones candidates per a índexs. - Evitar indexar columnes amb molts valors únics: Les columnes amb molts valors únics poden no beneficiar-se tant dels índexs.
- Utilitzar índexs compostos amb cura: Els índexs compostos (sobre múltiples columnes) poden ser útils, però només si les consultes utilitzen les columnes en l'ordre de l'índex.
- Monitoritzar i mantenir els índexs: Utilitzar eines com
EXPLAIN
per analitzar les consultes i assegurar-se que els índexs s'utilitzen correctament. També és important mantenir els índexs amb operacions deVACUUM
iREINDEX
.
Exercicis pràctics
Exercici 1: Creació d'un índex
Crea un índex sobre la columna cognom
de la taula empleats
.
Exercici 2: Creació d'un índex compost
Crea un índex compost sobre les columnes departament
i sou
de la taula empleats
.
Exercici 3: Anàlisi de consultes
Utilitza l'instrucció EXPLAIN
per analitzar la següent consulta i determina si l'índex creat a l'exercici 1 s'està utilitzant.
Conclusió
Els índexs són una eina poderosa per millorar el rendiment de les consultes en PostgreSQL. És important comprendre els diferents tipus d'índexs disponibles i com utilitzar-los de manera efectiva. Recorda que, tot i que els índexs poden accelerar les consultes, també tenen un cost en termes d'espai d'emmagatzematge i temps d'actualització. Utilitza'ls amb cura i monitoritza el seu ús per assegurar-te que la teva base de dades funcioni de manera òptima.
Curs de PostgreSQL
Mòdul 1: Introducció a PostgreSQL
Mòdul 2: Operacions bàsiques de SQL
Mòdul 3: Consultes SQL avançades
Mòdul 4: Disseny de bases de dades i normalització
Mòdul 5: Funcionalitats avançades de PostgreSQL
Mòdul 6: Optimització i millora del rendiment
- Optimització de consultes
- Estratègies d'indexació
- Analitzant el rendiment de les consultes
- Vacuuming i manteniment
Mòdul 7: Seguretat i gestió d'usuaris
- Rols d'usuari i permisos
- Mètodes d'autenticació
- Encriptació de dades
- Còpia de seguretat i restauració
Mòdul 8: Treballant amb JSON i funcionalitats NoSQL
Mòdul 9: Extensions i eines avançades
- PostGIS per a dades geoespacials
- Cerca de text complet
- Wrappers de dades externes
- PL/pgSQL i altres llenguatges procedimentals