Я ценю, что LIKE-запросы медленные, так как не могут быть проиндексированы.Тем не менее, мне любопытно, что производительность может снизиться в такой ситуации:
Скажем, у меня есть таблица типа:
user_id | message
-------------------
1 | foo bar baz
1 | bar buz qux
. . .
. . .
2 | bux bar foo
2 | bar
, где я скажу 1 миллион строк, но 10 000 пользователей,у каждого пользователя около 100 сообщений.
Очевидно, что поиск вроде:
SELECT * FROM table WHERE message like '%ar%';
будет очень медленным.Однако в моем приложении я бы только искал сообщения пользователя:
SELECT * FROM table WHERE message like '%ar%' AND user_id = 2;
, где будет индексирован столбец user_id
.
Прав ли я, полагая, что в таком сценарии,Postgres будет выполнять медленный LIKE-запрос только для пользователей ~ 100 строк после использования индексированного столбца user_id, а не полной таблицы - таким образом, ограничивая мое снижение производительности?
А также, что такой запрос не будет 'становится значительно медленнее с 10 или 100 миллионами пользователей, если у одного пользователя было всего ~ 100 сообщений?