Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как пересчитать доп. поле? [3]
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ugin_root причем тут размер?
вы чего-то не догоняете в сути задачи (Добавление)
lamozavrik пишет:
Как оказалось такой вариант не только медлительный,
но и избыточный
ugin_root
Отправлено: 22 Февраля, 2012 - 19:16:46
Частый гость
Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011 Откуда: Киргизия
Помог: 5 раз(а)
LIME
Я всё догоняю! и то что если нужны рандомные значения подстраивать под это дело большую таблицу не вариант. У меня примерно такой запрос(с обновлениями) на табличку с тегами а их количество очень быстро растёт, можете воспринимать мой пост как то какие запросы делать не стоит! Но как не странно подобный запрос выполняется на убунте в разы быстрее
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
в разы это многовато но не странно
mysql серверы разные же
в *nix-ах многое быстрее получается
ugin_root
Отправлено: 22 Февраля, 2012 - 19:34:00
Частый гость
Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011 Откуда: Киргизия
Помог: 5 раз(а)
LIME
5.451ms если быть точным. Ну там и железяки тоже в разы шустрее чем у меня дома
lamozavrik
Отправлено: 23 Февраля, 2012 - 01:03:28
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
Вот интересно, перечитал кучу сайтов и форумов по теме рандомной выборки, везде пишут, что запрос (при выборке к примеру 10 рандомных записей) с UNION быстрее работает чем запрос SELECT col FROM table ORDER BY RAND() LIMIT 10... Решил проверить на таблице с 1000000 записей. Вот результаты:
При выборке 10 записей с UNION: 10 total, Query took 1.7069 sec
При выборке с запросом SELECT col FROM table ORDER BY RAND() LIMIT 10: 10 total, Query took 0.8708 sec
Так почему всем так не нравится запрос типа SELECT col FROM table ORDER BY RAND() LIMIT 10?
Он что, более ресурсоёмкий? (Добавление)
Вот результаты по апдейт на 1200000 записей: 1210101 row(s) affected. ( Query took 4.7037 sec ) (Добавление)
А вот таким был запрос по абдейту )) UPDATE table SET col = col - 1 WHERE id > 1
----- Ударим крепким сном по мукам совести!
snikers987
Отправлено: 23 Февраля, 2012 - 08:44:53
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Помог: 25 раз(а)
При ORDER BY RAND() LIMIT 10 вся таблица копируется во временную, в случайном порядке, а потом забираются первые 10 записей.
----- Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
lamozavrik
Отправлено: 23 Февраля, 2012 - 09:40:32
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
snikers987, но времени этот запрос забирает меньше чем запрос c UNION. Я же говорю, что он просто больше ресурсов сервака кушает )
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.