С какими параметрами лучше создать таблицу для максимальной скорости выборки?
С какими параметрами лучше всего создать таблицу PostgreSQL для повышения скорости индексации\выборки *в ущерб целостности данных*?
Много ли можно выиграть сделав ее не журналируемой? И что еще можно придумать, чтобы максимально поднять скорость выборок?
Есть таблица на на 50+ млн строк, которая продолжает расти и в перспективе будет 100 млн.
По этим данным нужно регулярно делать COUNT(*) чтобы понимать сколько обработано\не обработано данных.
Целостность данных не критична. Если пару записей потеряется ничего страшного. Транзакции к этой таблице не нужны.
На таблице много индексов для повышения скорости выборок. Одновременно пишутся новые данные и их таблицы выбираются еще не обработанные данные.
Если надо максимально поднять скорость выборок, и при этом наплевать на скорость изменения данных, расход памяти и дисковое пространство - то понаделать кучу композитных индексов. Так, чтобы для любого запроса существовал индекс: 1 - оптимальный; 2- покрывающий.
Если пару записей потеряется ничего страшного.
У сервера БД ничего не теряется. Бывает, правда, что долго ищется...
таблица на на 50+ млн строк, которая продолжает расти и в перспективе будет 100 млн.
На таблице много индексов для повышения скорости выборок. Одновременно пишутся новые данные и их таблицы выбираются еще не обработанные данные
А точно ли тут нужно именно такое решение?
Можешь чуть подробнее описать.
Пока звучит как решение с какой-нибудь очередью на запись и таблицей на чтение
Может быть вообще нужная какая-нибудь другая СУБД?
Вообще, если целостность данных не важна - просто выставь минимальный уровень изоляции
Много ли можно выиграть сделав ее не журналируемой?
Нет. Только запись выигрывает, да и то по тестам раза, может, в два. При нештатном завершении работы сервера все данные потеряются в такой таблице.
Ну можно, конечно, вообще извратиться и создать TABLESPACE в tmpfs...
По этим данным нужно регулярно делать COUNT(*) чтобы понимать сколько обработано\не обработано данных.
Если выборка по всей таблице (или по большей части данных) - это не про постгрес, много раз обсуждалось.
Выход: делать через триггеры таблицу сумм или делать MATVIEW (что равносильно просто периодическому пересчету).
Если выборки относительно небольшие -индексы, индексы, индексы.