Ребята, вот в чем суть, есть таблица пользователей на несколько миллионов 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) Скорее всего миллион записей тоже можно разбить на определенные кластеры. Если да, лучше сделать больше табличек меньшего размера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
мне нужно чтобы при нажатии на кнопку сразу переходило по нужной ссылке , а не через созданную ссылку "подобрать" ссылка должна быть такого...
У меня есть страница настроек моего плагина, где можно добавить несколько текстовых полей и фотоСейчас ситуация такова, что при выборе файла...
Помогите составить запросНужно вывести строку, где datetime ближайшее значение к заданному