Вашият добавен предикат използва LIKE
оператор:
AND network LIKE '%'
Действителният план на заявката зависи от това какво предавате вместо '%'. Но като цяло обикновените btree индекси са безполезни за това. Ще ви е необходим триграмен индекс или да използвате инфраструктурата за търсене на текст или подобни, в зависимост от това какви модели може да търсите.
Вижте:
- Варианти на производителност на заявка LIKE на PostgreSQL
- Съвпадение на шаблони с LIKE, SIMILAR TO или регулярни изрази в PostgreSQL
Можете дори да комбинирате множество стратегии за индексиране. Пример:
Ако това трябва да бъде:
AND network = '<input_string>'
тогава по всякакъв начин действително използвайте =
оператор, а не LIKE
. Причини във възходящ ред на важност:
- по-кратко
- по-малко объркващо
- улеснява работата на планера на Postgres (много малко по-евтино)
-
правилно
Ако подадете низ със специални знаци по невнимание, може да получите неправилни резултати. Вижте: