Суть в чем, есть база данных на 1.5 миллиона строк.
Есть SQL запрос, с парой JOIN. Сейчас делаю пагинацию, вида LIMIT offset,50, так вот такая выборка выполняется 3 секунды. Без лимита, заброс выполняется быстро. Так как победить этот лимит и ускорить выборку с пагинацией? БД MySQL
Избавиться от джойнов с помощью денормализации, тогда лимит будет работать лучше, и вобще можно будет построить соответсвующий индекс, в котором будет пре-сортировка ваших данных. А вобще, что бы лучше ответить на ваш вопрос, хотелось бы посмотреть структуру и более полное описание задачи.
slicephp: а все же, можно узнать более конкретно задачу и структуру данных? И запрос именно такой или другой, а это просто пример? Если другой, то можно посмотреть запрос?
ускорять лимит не выйдет, оно завязано на count и чем больше строк, тем дольше считает.
Простой вариант по циклу делать where id > xxx LIMIT 50 а потом xxx+=50 и по новой
Анатолий Евладов: недавно задавался ровно таким же вопросом. Искал решение заметил что на лимитах в таблице с 900 к записей были задержки. В добавок вчера видел статью как раз на эту тему. Выбор в любом случае за вами.
Виталий: эм... у нас около 20 млн записей. И проблем нет.... впрочем как именно там всё устроено я не скажу - не знаю. Но лимиты используются точно. Завтра гляну подробнее и замерю скорости - может действительно получится заставить работать быстрее.
Анатолий Евладов: Виталий прав. Чем больше offset (т.е. чем дальше мы от начала выборки), тем дольше будет отрабатывать запрос. Просто потому что база же не знает, сколько нужно записей получить прежде чем мы дойдем до нужного offset-а. Поэтому получает выборку и начинает от начала искать. А запрос по PK (where id > ХХХ) и использование только limit позволяет сразу найти начало выборки и отсчитать от неё нужный limit. Такая оптимизация порой может давать выигрыш на порядок.