Другие языки программирования и технологии
ТОРМОЗИТ MySQL запрос, что делать, как его можно переделать???
"Что то сайт начал притормаживать, и посетителей стало меньше" подумал я ожидая загрузку сайта в течении 40 секунд... И вот сайт загрузился, но не прошло и минуты, все повторилось по новой! "Не нужно было есть грибы" пронеслось в голове, но посчитав эту мысль мелочью, я продолжил ожидания... Не смотря на то что Sql запросы программировались по всем законам правильности, я был поражен результату времени выполнения запросов. Вот посмотрите сами, всего выполняется 29 запросов, обязательно посмотрите время их выполнения и скажите мне, сколько по времени должен выполнятся нормальный запрос, если в таблице примерно 100 000 записей??? 1297291962 - это время старта в сек от начала эпохи юникс 1: --> 0.00036096572876 2: --> 0.0260758399963 3: --> 0.00106310844421 4: --> 0.000126123428345 5: --> 0.0263571739197 6: --> 0.000620126724243 7: --> 8: --> 0.000148057937622 9: --> 10: --> 0.000140905380249 11: --> 0.000118970870972 12: --> 0.000958919525146 1297291997 - это время старта в сек от начала эпохи юникс 1: --> 0.000112056732178 2: --> 31.1135270596 3: --> 0.000626802444458 4: --> 0.00017786026001 5: --> 0.243221998215 1297292003 - это время старта в сек от начала эпохи юникс 1: --> 0.000449180603027 2: --> 0.025162935257 3: --> 0.00106501579285 4: --> 5: --> 6: --> 7: --> 8: --> 0.000144958496094 9: --> 0.000267028808594 10: --> 11: --> 6.29425048828E-5 12: --> 0.000890016555786 Теперь посмотрите внимательно на запрос выполняющийся 31 секунду! $query = "UPDATE `userlist` SET `status` = 'tested', `limit` = '0' WHERE (SELECT COUNT(*) FROM `visitors` WHERE `where` = `userlist`.`url` AND DATE(datetime) = ADDDATE(DATE(NOW()),-1)) < 3 AND `status` = 'works';"; еще раз обращаю ваше внимание что в таблице `visitors` 100 000 записей во второй `userlist` 400 записей если говорить языком программирования, то запрос представляет собой цикл в цикле и это ппц как долго работает КАК МНЕ ЭТО ИСПРАВИТЬ? ЧТО ПРЕДПРИНЯТЬ? хелп хелп хелп!!!!
не вдаваясь в глубины маразма который ты написал выдавая за правильное.. .
если синтаксически правильные запросы и есть синтаксически правильный отстой.. .
поставь проверку условия
`status` = 'works'
ДО такой не понятной выборки
(SELECT COUNT(*) FROM `visitors`... и так далее.. . ) < 3
тогда в случае если у тебя
`status` НЕ_РАВНО 'works'
никаких последующих пошлых телодвижений с перебором 100 000 записей в `visitors` производиться не будет
а то получается что ты теребишь это 100 тысяч, которые возможно и не дадут тебе желанного <3, а потом ещё и выясняется что у тебя `status` НЕ_РАВНО 'works'
если синтаксически правильные запросы и есть синтаксически правильный отстой.. .
поставь проверку условия
`status` = 'works'
ДО такой не понятной выборки
(SELECT COUNT(*) FROM `visitors`... и так далее.. . ) < 3
тогда в случае если у тебя
`status` НЕ_РАВНО 'works'
никаких последующих пошлых телодвижений с перебором 100 000 записей в `visitors` производиться не будет
а то получается что ты теребишь это 100 тысяч, которые возможно и не дадут тебе желанного <3, а потом ещё и выясняется что у тебя `status` НЕ_РАВНО 'works'
Вообще не понимаю, что у тебя делает это: DATE(datetime) = ADDDATE(DATE(NOW()),-1) ? Я бы это упростил, перейдя на время Юникс в секундах, и посчитать это все заранее в PHP. Тут же нет данных из таблиц, зачем базу насиловать.. . Ну и status сделать целочисленным. tested заменить на 1, works - на 2. Так быстрее будет.
Занятный запрос. Не понимая его значения, сложно чего-то советовать.
Ну скажем, может быть нет нужды проверять: `status` = 'works' ?
А вообще, предполагаю, что таблицы изначально недостаточно рационально (если можно так выразиться) созданы. Подробней не насоветую :)
Ну скажем, может быть нет нужды проверять: `status` = 'works' ?
А вообще, предполагаю, что таблицы изначально недостаточно рационально (если можно так выразиться) созданы. Подробней не насоветую :)
по всем законам говоришь? подзапрос используй join
я, конечно, в этом ничего не понимаю, но написано хорошо)))
Похожие вопросы
- Ноутбук тормозит по страшному. Что делать?
- Операции в запросе mysql
- MySql в чем плюсы? Почему не обойтись?
- подскажите пожалуйста!! ! запрос на MySQL.
- PHP и MySQL. Пишу вот такой код, как в книге написано, но не работает. В чем причина?
- Помогите с MySQL
- Подробная установка связки Apache 2.0 + Php 5.1.4 + Mysql Server 4.1.16 под Win32 платформу
- Возникает ошибка в php mySQL. Подскажите, плиз.
- Работа с# и MySql
- Вопрос про MySQL. Собрался изучать MySQL к чему он прикручивается?