Как быстрее всего в растущей таблице узнать, существует ли хотя бы одна строка с двумя критериями поиска (WHERE)? - PullRequest
0 голосов
/ 07 августа 2020

В pg sql, какой самый быстрый запрос, чтобы узнать, есть ли в таблице BLOG_POST столбцы company_id=5 и status_id=3 хотя бы один раз, учитывая, что таблица может расти?

У меня много компаний используя эту таблицу, и у них может быть много записей, моя конечная цель также создать метод с именем hasCompanyAlreadyPublishedABlogPost(companyId).

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Условие EXISTS подойдет:

select exists (select * 
               from blog_post
               where company_id = 5
                 and status_id = 3);

Очевидно, вам нужен индекс для blog_post(company_id, status_id)

0 голосов
/ 08 августа 2020

Для дальнейшего повышения производительности мы можем сделать это:

select exists (select id
               from blog_post
               where company_id = 5
                 and status_id = 3 limit 1);
  1. Добавить ограничение во вложенный запрос
  2. Вместо select * мы можем сделать select any_column

Я пробовал это с образцом базы данных:

с идентификатором и лимитом:

explain analyze (select exists (select user_id from sample_table where sample_ids=4 and user_id=5 limit 1));
                                                               QUERY PLAN                                                               
----------------------------------------------------------------------------------------------------------------------------------------
 Result  (cost=8.17..8.18 rows=1 width=1) (actual time=0.014..0.014 rows=1 loops=1)
   InitPlan 1 (returns $0)
     ->  Index Scan using sample_table_pkey on sample_table  (cost=0.15..8.17 rows=1 width=0) (actual time=0.012..0.012 rows=1 loops=1)
           Index Cond: (user_id = 5)
           Filter: (sample_ids = 4)
 Planning Time: 0.091 ms
 Execution Time: 0.032 ms

без идентификатора и *

explain analyze (select exists (select * from sample_table where sample_ids=4 and user_id=5));
                                                               QUERY PLAN                                                               
----------------------------------------------------------------------------------------------------------------------------------------
 Result  (cost=8.17..8.18 rows=1 width=1) (actual time=0.014..0.014 rows=1 loops=1)
   InitPlan 1 (returns $0)
     ->  Index Scan using sample_table_pkey on sample_table  (cost=0.15..8.17 rows=1 width=0) (actual time=0.012..0.012 rows=1 loops=1)
           Index Cond: (user_id = 5)
           Filter: (sample_ids = 4)
 Planning Time: 0.084 ms
 Execution Time: 0.034 ms
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...