Десятки млн. записей с фасетным фильтром по пару десятку полей, с сортировкой по нескольким цифровым полям с номерной пагинацией.

grigori

( ͡° ͜ʖ ͡°)
Команда форума
просто ты так и не ответил как сделать чтобы запрос в таблице с 3-4 целочисленными полями с
Код:
LIMIT 15000000, 10
был быстрее 0.1 сек (даже без сортировки, хотя она там тоже нужна будет).
- ты рыбу ловишь?
- нет, я рыбу ловлю
- аа, я думал, ты рыбу ловишь

Запросов без структуры таблиц не бывает. Это не чье-то желание, так устроены базы данных.
Чтобы понять применимость экзотики, точно так же нужна структура данных и конкретные требования по их выборкам.
Мне жаль, но я чувствую довольно значительные сложности в коммуникации.
 

Yoskaldyr

"Спамер"
Партнер клуба
Чтобы понять применимость экзотики, точно так же нужна структура данных и конкретные требования по их выборкам.
просто ты так и не ответил как сделать чтобы запрос в таблице с 3-4 целочисленными полями с
Более чем конкретное описание структуры таблицы. целочисленные, т.е. INT (все остальное по умолчанию). Или еще нужно название этих полей? Только вот названия полей на скорость выполнения запросов практически не влияют (десятитысячные доли % на разницу парсинга между длинными и короткими именами колонок).

Вот просто классика д'Артаньянизма. Ну не знаешь - пройди мимо.
 

Yoskaldyr

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@Yoskaldyr мы давно не подростки, как для взрослого ты общаешься некорректно - никто на тебя не нападает, а ты нападаешь без причины, поэтому я закрываю тему за нарушение правил форума
 

AmdY

Пью пиво
Команда форума

Yoskaldyr

"Спамер"
Партнер клуба
никто на тебя не нападает
У меня нет вопросов, ни к одному участнику дискуссии, кроме тебя. Потому что ты в своем репертуаре как всегда - не ответил на вопрос, а только поразводил понты:
в начале 2010х в sotmarket было порядка 40 млн товарных позиций в одной базе mysql без шардинга с нормализованной EAV структурой данных, и фасетный, то есть, обычный фильтр по нескольким характеристикам работал на обычных запросах с десятком join, с оптимизацией по индексам, и даже без кеширования
И слился когда я сделал конкретное уточнение на пагинации. Пагинация это основная проблема, а фасеты и сортировка только все усугубляют. Если бы сказал, что на мускуле/постгре это нерешаемо, я бы тоже не сагрился - т.к. я в курсе этого. А так - классическое д`Артаньянство.

Ко всем остальным у меня не было никаких претензий, т.к. предлагаемые ответы из разряда тебе "это не надо", а не решение проблемы - ЭТО НОРМА для клуба :) И если бы я был обидчивой снежинкой, то я бы давно уже не сидел на клубе.

И вопрос я задал только потому что я знаю, что используя популярные ДБ эту задачу решить НЕ ВОЗМОЖНО. И только потому что одна из моих специализаций платная оптимизация запросов (т.е. я знаю наверное все способы оптимизации запросов для того же мускуля, когда например поможет обновление ДБ, когда можно переписать запрос, а когда нужно и логику переписывать). Перепробовать все возможные базы данных ни у кого нет возможности (их же реально дофига под разные задачи). Вот именно поэтому и спросил и может кто юзал какую экзотику для аналитики или подобного.

Плюс можно попробовать подобную магию, у меня нет под рукой большой базы чтобы проверить работает ли с инодб
К сожалению, эта тоже давно известная оптимизация (селект только идшников и селфждоин этой же таблицы) и на таких выборках скип занимает дофига даже когда идет скип в селекте только идшников из кластерного индека (самый быстрый для мускуля вариант)
ты пропустил мое предложение с эластиком
Когда я давно пробовал (лет 7 назад), пагинация у эластика была такой же тормознутой как и везде, но вот хз как оно сейчас. Но раз говоришь что должно норм работать - попробую

Еще из интересного нагуглил это вертика по идее умеет более менее быстро работать с такими запросами (но хз что в их понимании быстро, но по идее такое количество строк для колоночных БД это ничто):
 

Adelf

Administrator
Команда форума
Всплывет одна более-менее нормальная тема за полгода и то ее закрывают.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@Yoskaldyr ты пропустил мое предложение с эластиком, он в твоеём кейсе должен отлично сработать. Плюс можно попробовать подобную магию, у меня нет под рукой большой базы чтобы проверить работает ли с инодб https://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/.
Протестил у себя на БД, да, оно правда работает побыстрее, но не так, как автор утверждает, прирост у меня - раза в 4. Так сделать LIMIT 90000000,10 - занимает 42с, а с вывертом - около 4.3с. Но метод интересный)
 

Yoskaldyr

"Спамер"
Партнер клуба
Но метод интересный)
Его можно в разных случаях применять, особенно когда в результирующей выборке есть большие по размеру поля, но которые не участвуют в сортировке/условиях. Громадный выигрыш за счет значительно меньшего объема скопированных данных во временные таблицы.

Всплывет одна более-менее нормальная тема за полгода и то ее закрывают.
А это когда-то нас останавливало??? 🤣
 

AmdY

Пью пиво
Команда форума
Я здесь с ребятами поговорил, сказали мол нет проблем у них с оффсетами, вот каун и джойны могут притормаживать, а оффсет и на пол террабайтной табличке быстро работает.
 

Yoskaldyr

"Спамер"
Партнер клуба
Я здесь с ребятами поговорил, сказали мол нет проблем у них с оффсетами, вот каун и джойны могут притормаживать, а оффсет и на пол террабайтной табличке быстро работает.
На какой базе? и быстро это сколько? И размер таблицы не сильно влияет на результат, влияет именно количество полей. И понятное дело что тормозят не первые оффсеты, а когда как раз конец списка (т.е. самый худший случай, когда база перебрала все результаты до нужных).
Если есть возможность, приведи пример. Я понимаю, что не это не всегда возможно. Мне просто чтобы знать порядки значений.

С джойнами наоборот как раз проблем нет. Да и не может быть по определению, если данные из джойнов не участвуют в условиях выборки/сортировки. В крайнем случае таблицы всегда можно джойнить к результатам первого простого запроса (аналог хака с селфджойном)
 

Gorynych

Посетитель PHP-Клуба
пять копеек: а почему не положить фасет на Элестик? Базке плохо всегда от добавления индексов
 
Сверху