AGGIORNAMENTO DEI BENCHMARKS PER IL 2016 (pag. 9.5 +)
E usando benchmark "pure SQL" (senza alcuno script esterno)
usa qualsiasi string_generator con UTF8
parametri di riferimento principali:
2.1. INSERIRE
2.2. SELEZIONA il confronto e il conteggio
CREATE FUNCTION string_generator(int DEFAULT 20,int DEFAULT 10) RETURNS text AS $f$
SELECT array_to_string( array_agg(
substring(md5(random()::text),1,$1)||chr( 9824 + (random()*10)::int )
), ' ' ) as s
FROM generate_series(1, $2) i(x);
$f$ LANGUAGE SQL IMMUTABLE;
Preparare test specifici (esempi)
DROP TABLE IF EXISTS test;
-- CREATE TABLE test ( f varchar(500));
-- CREATE TABLE test ( f text);
CREATE TABLE test ( f text CHECK(char_length(f)<=500) );
Eseguire un test di base:
INSERT INTO test
SELECT string_generator(20+(random()*(i%11))::int)
FROM generate_series(1, 99000) t(i);
E altri test,
CREATE INDEX q on test (f);
SELECT count(*) FROM (
SELECT substring(f,1,1) || f FROM test WHERE f<'a0' ORDER BY 1 LIMIT 80000
) t;
... E usa EXPLAIN ANALYZE
.
AGGIORNATO ANCORA 2018 (pg10)
piccola modifica per aggiungere i risultati del 2018 e rafforzare i consigli.
Risultati nel 2016 e 2018
I miei risultati, dopo la media, in molte macchine e in molti test: tutti uguali
(deviazione standard statisticamente inferiore al tham).
Raccomandazione
Usa il text
tipo di dati,
evita i vecchi varchar(x)
perché a volte non è uno standard, ad esempio nelle CREATE FUNCTION
clausole varchar(x)
≠varchar(y)
.
esprimere limiti (con le stesse varchar
prestazioni!) di con CHECK
clausola CREATE TABLE
nell'es CHECK(char_length(x)<=10)
.
Con una perdita trascurabile di prestazioni in INSERT / UPDATE è anche possibile controllare intervalli e struttura delle stringhe
ad esCHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')