২০১ 2016 সালের জন্য বেঞ্চমার্কগুলি আপডেট করুন (pg9.5 +)
এবং "খাঁটি এসকিউএল" বেঞ্চমার্ক ব্যবহার করে (কোনও বাহ্যিক স্ক্রিপ্ট ছাড়াই)
ইউটিএফ 8 সহ যে কোনও স্ট্রিং_জেনেটর ব্যবহার করুন
প্রধান মানদণ্ড:
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)
≠varchar(y)
।
উদাহরণস্বরূপ ক্লজ সহ সীমা প্রকাশ (একই varchar
কার্যকারিতা সহ!) । INSERT / UPDATE এ পারফরম্যান্সের একটি নগণ্য ক্ষতির সাথে আপনি রেঞ্জ এবং স্ট্রিং স্ট্রাকচার নিয়ন্ত্রণও করতে পারেন উদাহরণস্বরূপCHECK
CREATE TABLE
CHECK(char_length(x)<=10)
CHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')