есть у меня такая таблица
CREATE TABLE IF NOT EXISTS tbl0 (id SERIAL, n TEXT, h TEXT, w INTEGER, t INTEGER, i TEXT, e TEXT, s INTEGER);
И запрос к этой таблице
"select n,h,w,t,i,e from tbl0 where s = 0 limit 1"
Индексы нужно строить по s, верное утверждение?
Да
спасибо. а могут индексы помочь на инсертах? а то при большой нагрузке бд не вывозит. или в этом случае только горизонтально масштабировать?
Индексирование сделает ситуацию с инсертами хуже
Нет, наоборот. При вставке и обновлении нужно ещё и индексы обслужить.
Вообще говоря нет.
Почему?
Потому что необходимость индексов показывает EXPLAIN (ANALYZE, BUFFERS)... И в общем случае, в приведённом DDL ПГ далеко не всегда будет использовать индексы.
а сортировка где?
раз: https://habr.com/ru/company/postgrespro/blog/578196/ два: https://habr.com/ru/company/postgrespro/blog/326096/
Вам тут ужэ оба пункта сказали -- но повторюсь. Во-первых индэкс не всегда полезен дажэ конкретно при таком запросе. Во-вторых -- оцэнивать его пользу лучшэ комплексно, поскольку индэкс небесплатен и можэт оказаться, что выигрыш в этом вопросе он даёт несущественный для бизнеса, но при этом занимает место на диске, в памяти и замедляет все модицыикацыи данных.
это я понял. я просто не представляю как мне высчитать какой сервер нужен под мою нагрузку. таблицы и запросы у меня очень простые, даже можно сказать примитивные, а вот нагрузка 5к рпс и данных 100м в каждой таблице
Напишыте скрипты нагрузочного тэстирования, отладьте, прокрутите много раз, чтобы были варианты разбитых в перемешку данных -- а потом возьмите в аренду инстанс на амазоне, чтобы посмотреть -- чего хватает, чего нет.
И да, это, в принцыпе, копеечные объёмы -- если нет чего-то своеобразного, то с таким сейчас домашние компы справляются.
в том и дело, домашняя машинка у меня держит любую нагрузку, а на впс 4 ядра/4 ОЗУ всё отдано постгресу и на полной нагрузке оно ложится на инсертах
Тогда скорее всего дело в IO отграничениях инстанса, у того же Амазона на штатных ес2 сам по себе IOPS ужасный - оно конечно SSD, но проходит через дико подрезающий контроллер. Там конкретно лучше брать машины с NVMe диском выделенным , но у них там нюанс что такие диски не персистентны у них
а что мешает наполнить базу и прогнать оба варианта, и посмотреть как будет вести себя планировщик. тут много факторов которые планировщик анализирует, включая статистику. иногда кроме как попробовать оба варианта решение и не принять Но да. Если вы применяете равенство, то скроее всего будет работать index scan. Т.е. чем уже выборка тем выше вероятность использования индекса
Обсуждают сегодня