MEMPERBARUI BENCHMARKS UNTUK 2016 (hal9.5 +)
Dan menggunakan tolok ukur "SQL murni" (tanpa skrip eksternal)
gunakan string_generator dengan UTF8
tolok ukur utama:
2.1. MEMASUKKAN
2.2. PILIH membandingkan dan menghitung
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;
Siapkan tes khusus (contoh)
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) );
Lakukan tes dasar:
INSERT INTO test
SELECT string_generator(20+(random()*(i%11))::int)
FROM generate_series(1, 99000) t(i);
Dan tes lainnya,
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;
... Dan gunakan EXPLAIN ANALYZE
.
DIPERBARUI LAGI 2018 (hal 10)
sedikit edit untuk menambahkan hasil 2018 dan memperkuat rekomendasi.
Hasil pada 2016 dan 2018
Hasil saya, setelah rata-rata, di banyak mesin dan banyak tes: semua sama
(secara statistik kurang dari standar deviasi tham).
Rekomendasi
Gunakan text
tipe data,
hindari yang lama varchar(x)
karena terkadang ini bukan standar, misalnya dalam CREATE FUNCTION
klausa varchar(x)
≠varchar(y)
.
menyatakan batas (dengan varchar
kinerja yang sama !) dengan dengan CHECK
klausa dalam CREATE TABLE
mis CHECK(char_length(x)<=10)
.
Dengan hilangnya kinerja yang dapat diabaikan dalam INSERT / UPDATE Anda juga dapat mengontrol rentang dan struktur string
misalnyaCHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')