Я вставил в свою тестовую базу данных 10 тыс. Строк. Я провожу тестирование производительности с некоторыми образцами индексов. В настоящее время я создал кластеризованный индекс по первичному ключу, чтобы увидеть, может ли фильтр точного совпадения иметь значение, и для получения этого результата по-прежнему требуется> 800 мс:
Примечание. Это всего лишь образец теста высокого уровня, поэтому все столбцы varchar заполнены> 100.
CREATE UNIQUE INDEX people_idx ON people (id);
CLUSTER people USING people_idx;
select * from people
where id = 2;
CREATE TABLE "people" (
id SERIAL PRIMARY KEY,
first_name varchar(255) default NULL,
last_name varchar(255) default NULL,
email varchar(255) default NULL,
created_date varchar(255),
phone varchar(100) default NULL,
customer_id integer NULL
);
Правильно ли я думаю об этом?
Я обновил индекс кластера, чтобы добавить к last_name
:
CREATE INDEX people_idx ON people (last_name);
EXPLAIN ANALYZE select * from people
where first_name = 'Sophia';
EXPLAIN ANALYZE select * from people
where last_name ILIKE 'd%';
Результат анализа выглядит следующим образом:
"Seq Scan on people (cost=0.00..170.00 rows=416 width=76) (actual time=0.042..6.807 rows=414 loops=1)"
" Filter: ((last_name)::text ~~* 'd%'::text)"
" Rows Removed by Filter: 9586"
"Planning Time: 0.191 ms"
"Execution Time: 6.857 ms"