У меня довольно большая таблица MySQL (около 15 строк 000+), и я ищу способ выполнить следующий запрос, но более эффективным способом:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
Этот запрос использует слишком много ОЗУ на моем VPS, который я могу понять, выбрав более 15 000 строк. Я знаю, какие 5 индексов мне нужны из 15, 000+ (после сортировки в порядке DESC). Как я могу получить только эти 5 в свой результирующий набор, а не все 15 000?
Просто используйте разбитый на страницы запрос, чтобы ограничить объем данных, отправляемых на сервер приложений. См. Использование MySQL LIMIT для ограничения количества строк, возвращаемых по инструкции SELECT. Например, если размер вашей страницы равен 100, результат первой страницы можно получить с помощью:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
LIMIT 0, 100;
Вторая страница:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
LIMIT 100, 100;
Третий:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
LIMIT 200, 100;
Таким образом, вам нужно будет контролировать разбиение на страницы в приложении.
Если у вас есть список желаемых индексов, вы можете добавить ограничение в предложение WHERE:
WHERE indexCol IN (1,2,3,4,5)
20
- 25
limit 5
в конце вашего запроса, если вам нужно только 5