Быстрые результаты благодаря большому предложению SQL «IN» и миллионам строк

#sql #postgresql #performance #select

#sql #postgresql #Производительность #выберите

Вопрос:

В Postgres рассмотрим таблицу с 30 миллионами строк, один столбец из которых — Страна. Представлены все страны, так что примерно 200 разных стран. Существует приложение, которое позволяет пользователю выбирать любое количество стран, и приложение должно возвращать все строки.

Таким образом, базовое решение выглядит примерно так (где приложение / пользователь выбрал 4 страны в коллекции):

 SELECT *
FROM Table
WHERE Table.Country IN ('italy','france', 'sweden', 'canada');
 

Какое решение является более эффективным?

Комментарии:

1. Почему вы думаете, что это неэффективно?

2. когда мы пробуем это, это действительно медленно, лол

3. Проблема, вероятно, заключается в том, что вы возвращаете очень много данных. Существует всего пара сотен стран, поэтому ваш запрос, вероятно, возвращает по крайней мере несколько сотен тысяч строк, если не миллионы.

Ответ №1:

Если вы создаете индекс B-дерева для столбца, этот запрос является наиболее эффективным решением.