AKTUALISIERUNG DER BENCHMARKS FÜR 2016 (S. 9,5 +)
Und mit "Pure SQL" -Benchmarks (ohne externes Skript)
Verwenden Sie einen beliebigen string_generator mit UTF8
Hauptbenchmarks:
2.1. EINFÜGEN
2.2. SELECT Vergleichen und Zählen
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;
Spezifischen Test vorbereiten (Beispiele)
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) );
Führen Sie einen Basistest durch:
INSERT INTO test
SELECT string_generator(20+(random()*(i%11))::int)
FROM generate_series(1, 99000) t(i);
Und andere Tests,
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;
... und verwenden EXPLAIN ANALYZE
.
WIEDER AKTUALISIERT 2018 (S. 10)
wenig bearbeiten, um die Ergebnisse von 2018 hinzuzufügen und Empfehlungen zu verstärken.
Ergebnisse in 2016 und 2018
Meine Ergebnisse nach dem Durchschnitt in vielen Maschinen und vielen Tests: alle gleich
(statistisch weniger als die Standardabweichung).
Empfehlung
Verwenden Sie den text
Datentyp,
vermeiden Sie alte, varchar(x)
da dies manchmal kein Standard ist, z . B. in den CREATE FUNCTION
Abschnitten varchar(x)
≠varchar(y)
.
ausdrückliche Grenzen (bei gleicher varchar
Leistung!) durch mit CHECK
Klausel in der CREATE TABLE
z CHECK(char_length(x)<=10)
.
Mit einem vernachlässigbaren Leistungsverlust in INSERT / UPDATE können Sie auch Bereiche und String-Strukturen steuern,
zCHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')