Редактировать на основе комментариев от spencer7593 и Мартин:
Простой подсчет + выберите запрос может быть намного быстрее, чем один SQL_CALC_FOUND_ROWS. см: Which is fastest? SELECT SQL_CALC_FOUND_ROWS FROM `table`, or SELECT COUNT(*)
Я предлагаю работает как исходный запрос и:
SELECT count(*)
FROM `logs`
WHERE `connect_timestamp` > 10000
плюс:
SELECT `a`
FROM `logs`
WHERE `connect_timestamp` > 10000
ORDER BY `connect_timestamp` DESC
LIMIT 1
Лучший даже запускать все с EXPLAIN добавил измерить (и добавить) среды выполнения и см. разницу, вы также можете добавить SQL_NO_CACHE для имитации первого запуска. см: https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
Если это не помогает вообще я предлагаю посмотреть на следующие:
вещей вы можете попробовать:
- индекс столбца, который используется для поиска (вы, кажется, уже сделали это)
- Сделайте запрос для конкретных запросов, которые должны выполняться часто.
- Попробуйте кэшировать определенную таблицу, если на сервере имеется память.
- Также, как сказал Мартин в комментариях, поставьте EXPLAIN перед запросом, чтобы увидеть, какая часть запроса занимает все время. Может быть, вы можете что-то изменить.
Это те вещи, которые я могу придумать.
Что такое «нормальный» индекс? – Martin
вы хотите иметь индекс в столбце 'connect_timestamp'. – Martin
И используйте 'EXPLAIN', чтобы помочь вам объяснить SQL – Martin