И используя тесты «чистого SQL» (без какого-либо внешнего скрипта)
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
.
UPDATED AGAIN 2018 (pg10)
мало редактировать, чтобы добавить результаты 2018 года и укрепить рекомендации.
Мои результаты после средних значений на многих машинах и во многих тестах: все равно (статистически меньше стандартного отклонения).
text
избегайте старых varchar(x)
, потому что иногда это не стандарт, например в CREATE FUNCTION
положениях varchar(x)
≠ varchar(y)
. varchar
производительность!) с помощью предложения CHECK
в CREATE TABLE
, например. CHECK(char_length(x)<=10)
. При незначительной потере производительности в INSERT / UPDATE вы также можете управлять диапазонами и строковой структурой, например. CHECK(char_length(x)>5 AND char_length(x)<=20 AND x LIKE 'Hello%')
Я нашел простое решение, не используя JQuery и с помощью CSS только.
необходимо поместить фиксированное содержание в теги и добавить CSS
table th {
position:sticky;
top:0;
z-index:1;
border-top:0;
background: #ededed;
}
, который положение, z-индекс и главные свойства достаточно. Но можно применить остальных для предоставления для лучшего представления.