Module J4
Dalibo SCOP
24.09
29 août 2024
Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :
PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.
Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 12 à 16.
Un index améliore les SELECT
SELECT
=# SELECT * FROM test WHERE id = 10000; Temps : 1760,017 ms
=# CREATE INDEX idx_test_id ON test (id); =# SELECT * FROM test WHERE id = 10000; Temps : 27,711 ms
-- bloque les écritures ! CREATE INDEX ON matable ( macolonne ) ; -- ne bloque pas, peut échouer CREATE INDEX CONCURRENTLY ON matable ( macolonne ) ;
REINDEX INDEX nomindex ; REINDEX TABLE CONCURRENTLY nomtable ;
maintenance_work_mem
max_parallel_maintenance_workers
UNIQUE
<
<=
=
>=
>
SELECT name FROM ma_table WHERE id = 22
CREATE INDEX ON ma_table (id, name) ;
EXPLAIN (ANALYZE, BUFFERS)
C’est souvent tout à fait normal
VACUUM
CAST
EXPLAIN SELECT * FROM clients WHERE client_id = 3::numeric;
SELECT * FROM ma_table WHERE to_char(ma_date, 'YYYY')='2014' ;
SELECT * FROM fournisseurs WHERE commentaire LIKE 'ipsum%';
CREATE INDEX idx1 ON ma_table (col_varchar varchar_pattern_ops) ;
CREATE INDEX … CONCURRENTLY
De nombreuses possibilités d’indexation avancée :
CREATE INDEX on evenements (type) WHERE traite IS FALSE ;
IN
CREATE INDEX ON matable ( champ_filtre ) WHERE champ_filtre = …
CREATE INDEX ON matable ( champ_resultat ) WHERE champ_filtre = …
a
SELECT … WHERE upper(a)='DUPOND'
CREATE INDEX mon_idx ON ma_table (upper(a)) ;
IMMUTABLE
ANALYZE
CREATE UNIQUE INDEX clients_idx1 ON clients (id_client) INCLUDE (nom_client) ;
WHERE
SELECT id_client,nom_client FROM clients WHERE id_client > 100 ;
WHERE col_varchar LIKE 'chaine%'
varchar_pattern_ops
CREATE INDEX idx1 ON ma_table (col_varchar varchar_pattern_ops)
https://dali.bo/j4_quiz