2016 İÇİN GÜNCELLEME TEZGAHLARI (pg9.5 +)
Ve "saf SQL" karşılaştırmaları kullanmak (harici komut dosyası olmadan)
UTF8 ile herhangi bir string_generator kullanın
ana kriterler:
2.1. INSERT
2.2. Karşılaştırma ve saymayı SEÇ
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;
Spesifik test hazırlayın (örnekler)
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) );
Temel bir test yapın:
INSERT INTO test
SELECT string_generator(20+(random()*(i%11))::int)
FROM generate_series(1, 99000) t(i);
Ve diğer testler,
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;
... ve kullanın EXPLAIN ANALYZE
.
TEKRAR GÜNCELLEME 2018 (pg10)
2018'in sonuçlarını eklemek ve önerileri güçlendirmek için küçük bir düzenleme yapın.
2016 ve 2018 sonuçları
Ortalamamdan sonra, birçok makinede ve birçok testte sonuçlarım: hepsi aynı
(istatistiksel olarak daha az tham standart sapma).
Öneri
Kullanım text
, veri türü
eski önlemek varchar(x)
bazen standart, örneğin olmadığından CREATE FUNCTION
maddeleri varchar(x)
≠varchar(y)
.
(Aynı ile sınırlarını ifade varchar
performans!) ile tarafından CHECK
yan tümcesi CREATE TABLE
örneğin CHECK(char_length(x)<=10)
.
Aşağıdakileri de yapabilirsiniz kontrol aralıkları ve dize yapısı için INSERT / UPDATE performans ihmal edilebilir kaybı ile
örCHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')