Ребята, вот в чем суть, есть таблица пользователей на несколько миллионов user так же есть таблица orders и users_to_orders
SELECT total FROM users
LEFT JOIN users_to_orders ON users.id = users_to_orders.id_user
LEFT JOIN ordersON users_to_orders.id_orders = orders.id
GROUP BY firstname DESC LIMIT 0,500
запрос выполняется миллионы лет тип таблиц "MyISAM", так же стоят все индексы, как максимально сократить время выборки результата и выбрать 10 пользователей с максимальным суммарным тоталом?
в таблице users и orders индекс это id в таблице users_to_orders индексы id_orders и id_user
Нужно делать группировку по индексу. Численному. Все строки плохо индексируются B+-деревьями, по определению.
SELECT * FROM (
SELECT U.id as user_id, count(O.id) as total FROM users AS U
LEFT JOIN users_to_orders AS UO ON U.id = UO.id_user
LEFT JOIN orders AS O ON UO.id_orders = O.id
GROUP BY U.id DESC
) AS P1 INNER JOIN users AS P2 ON P1.user_id = P2.id
ORDER BY P1.total DESC LIMIT 0, 500;
Нужно кеширование делать. Вам нужны 500 результатов - обновляйте их раз в N секунд. Например, может помочь временная таблица aka materialized view (да, их можно эмулировать по триггеру).
InnoDb. Тут все просто.
Вам надо сначала убедиться, что узкое место именно в DB. У меня тоже в одном проекте есть до 1 млн записей, но работает весьма шустро.
Есть подозрение, что дело не таблицах. Вам надо натыкать везде логи, и найти узкое место - где больше всех задержка.
Если окажется, что проблема в таблицах.
1) Одно из самое главных используем InnoDb. MyISAM намного медленнее, там даже блокировка на уровне таблиц, а не строк.
2) Все таблицы необходимо привести к 3-ей нормальной форме. Чтобы поиск был исключительно по цифрам (они быстрее обрабатываются чем строки).
3) Скорее всего миллион записей тоже можно разбить на определенные кластеры. Если да, лучше сделать больше табличек меньшего размера.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости