2016 के लिए अद्यतन बेंचमार्क (pg9.5 +)
और "शुद्ध एसक्यूएल" बेंचमार्क का उपयोग करना (बिना किसी बाहरी स्क्रिप्ट के)
UTF8 के साथ किसी भी string_generator का उपयोग करें
मुख्य बेंचमार्क:
2.1। सम्मिलित करें
2.2। तुलना और गिनती का चयन करें
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;
विशिष्ट परीक्षण (उदाहरण) तैयार करें
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) );
एक मूल परीक्षण करें:
INSERT INTO test
SELECT string_generator(20+(random()*(i%11))::int)
FROM generate_series(1, 99000) t(i);
और अन्य परीक्षण,
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;
... और उपयोग करें EXPLAIN ANALYZE
।
अद्यतन किया गया 2018 (pg10)
2018 के परिणामों को जोड़ने और सिफारिशों को सुदृढ़ करने के लिए थोड़ा संपादित करें।
2016 और 2018 में परिणाम
मेरे परिणाम, औसतन, कई मशीनों और कई परीक्षणों में: सभी समान
(सांख्यिकीय रूप से कम थम मानक विचलन)।
सिफ़ारिश करना
text
डेटाटाइप का उपयोग करें ,
पुराने से बचें varchar(x)
क्योंकि कभी-कभी यह एक मानक नहीं है, उदाहरण के लिए CREATE FUNCTION
खंड varchar(x)
avoidvarchar(y)
।
एक्सप्रेस सीमाएँ (एक ही varchar
प्रदर्शन के साथ !) जैसे CHECK
खंड में । एक नगण्य नियंत्रण पर्वतमाला और स्ट्रिंग संरचना करने के लिए आप भी कर सकते हैं सम्मिलित / अपडेट करने में प्रदर्शन की हानि के साथ जैसेCREATE TABLE
CHECK(char_length(x)<=10)
CHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')