Понимание Postgres индексов - все еще медленно - PullRequest
0 голосов
/ 12 июля 2020

Я вставил в свою тестовую базу данных 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...