Выбор MySQL, упорядочение по DESC и получение определенных индексов

0

У меня довольно большая таблица 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?

  • 0
    15к строк это ничего. Вы определили индексы для некоторых столбцов? И добавьте limit 5 в конце вашего запроса, если вам нужно только 5
Теги:
select
sql-order-by

2 ответа

0
Лучший ответ

Просто используйте разбитый на страницы запрос, чтобы ограничить объем данных, отправляемых на сервер приложений. См. Использование 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;

Таким образом, вам нужно будет контролировать разбиение на страницы в приложении.

  • 0
    именно то, что я искал, спасибо! :)
0

Если у вас есть список желаемых индексов, вы можете добавить ограничение в предложение WHERE:

 WHERE indexCol IN (1,2,3,4,5)
  • 0
    К сожалению, я не знаю, какими будут желаемые индексы, просто номер индекса, например, индексы 20 - 25
  • 0
    Предоставленное мною условие позволяет вам указывать эти числовые индексы.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню