Задавайте вопросы, мы ответим
Вы не зашли.
Решение "в лоб" выглядит так:
Отредактированно Doxtor (24.09.2012 21:40:16)
Неактивен
Скорость выполнения запроса "SELECT id FROM node" может немного ускорить наличие индекса на id, ну или если у id первичный ключ.
Если Вы приведете полностью текст запросов типа SELECT ...WHERE ... id='$node_id'", то можно подумать как их оптимизировать.
Запрос с update в теории можно было бы организовать так, чтобы не писать цикл, если, конечно можно на уровне SQL вычислить те значения, которые Вы вычисляете в цикле.
Но для этого нужно больше конкретики.
Неактивен
Лично я предполагал, что внутри селектов всё "максимально" оптимизировано. Но давайте попробуем:
Отредактированно Doxtor (25.09.2012 12:42:06)
Неактивен
Если еще не созданы, то я рекомендовал бы создать индексы на general_cnt.node_id и vote.vote_date. Ну и составной на поля (node_id,vote_date) в таблице vote.
Неактивен
Индексы и первичные ключи есть.
vote.node_id не было индекса.
Добавил, ускорение в 16 раз.
Спасибо.
Хотелось бы, конечно, полностью избавиться от цикла.
Сейчас добью INNER JOIN и выложу решение (если сам справлюсь)
Отредактированно Doxtor (25.09.2012 15:09:02)
Неактивен
Полностью избавиться от циклов не получилось.
Результат: уменьшение времени запросов в 20 !!! раз.
Пока меня это устраивает. При увеличении времени буду смотреть в сторону временных таблиц.
Объединить два запроса в один не удалось из-за того, что в первом запросе:
LEFT JOIN vote ON general_cnt.vote_id = vote.id
а во втором:
INNER JOIN vote ON vote.node_id = node.id
Было ли какое-либо решение?
Решение выглядит так:
Отредактированно Doxtor (25.09.2012 21:42:32)
Неактивен
Наверное Вы имели в виду не временные таблицы, а таблицы с движком memory.
Насчет циклов - не факт, что избавившись от цикла скорость увеличилась бы. Практика показывает, что несколько простых запросов работают быстрее, чем 1 навороченный.
Неактивен
Имел в виду:
1. SELECT
2. CREATE TEMPORARY TABLE идентичной обновляемой
3. UPDATE через TEMPORARY TABLE (без цикла)
нет?
deadka написал:
Насчет циклов - не факт, что избавившись от цикла скорость увеличилась бы. Практика показывает, что несколько простых запросов работают быстрее, чем 1 навороченный.
Это да и возможно я сэкономил бы ещё пару миллисекунд (определить это "по-быстрому" не получилось)
Просто в моём случае "несколько" это 650 запросов, в перспективе 6,5 К, и поэтому я думал, что один сложный запрос может оказаться быстрее.
Отредактированно Doxtor (25.09.2012 22:07:16)
Неактивен