[umka]

[umka]
Рейтинг
456
Регистрация
25.05.2008
Aisamiery:
Сначала собирается коллекция на основе WHERE, потом фильтруеться по HAVING и уже после этого выбираются поля (срабатывает ваш SLEEP)

Вы уж определитесь, NOW() выполняется для формирования выборки или для каждой строки.

Aisamiery:
Вы реально не знаете какая сейчас дата и хотите вычислить её для каждой строки из миллиона в табличке?
Aisamiery:
Это что то новенькое ))) Всё это так, пока вы юзаете NOW в секции SELECT, как в примерах из документации по вашей ссылке, как только вы юзаете его в секции WHERE правила меняються. Вы можете потестить на досуге если что. А все дело в том, что он возвращает системное время до доли секунды, тем самым не попадая в кэш ну уж никак и БД приходится вычислять все время. Если уж так нужна дата, то для этого есть CURDATE(), а еще лучше подставить туда скалярное значение.

Вы документацию-то пробовали читать? Или у вас только своя вольная интерпретация имеется?

Ещё раз приведу эту же строчку:

"NOW() returns a constant time that indicates the time at which the statement began to execute."

И по-русски дословно:

"NOW() возвращает временнУю константу, указывающую, в какой момент времени начал выполняться запрос."

Вот вам пример, который выводит одну строку из таблицы, хотя по вашему утверждению должен выводить две.

И не вводите людей в заблуждение!


CREATE TABLE `test` (
`ts` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test` SET `ts`=NOW()-INTERVAL 5 SECOND;
INSERT INTO `test` SET `ts`=NOW()+INTERVAL 2 SECOND;

SELECT SLEEP(5), `ts` FROM `test` WHERE `ts`<NOW();
Оптимизайка:
Unfortunately, such queries are not cached by MySQL.

А при чём тут кеширование запросов? Речь шла об "вычислить её для каждой строки".

NOW() returns a constant time that indicates the time at which the statement began to execute.

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now

Aisamiery:
Мне так нравяться такие запросы :)

AND P.post_date < NOW()


Вы реально не знаете какая сейчас дата и хотите вычислить её для каждой строки из миллиона в табличке?

Про отложенную публикацию не слышали? :)

NOW() в таком виде вычисляется единожды, в момент создания запроса, а не для каждой строчки.

yura5:
Можно ли решить проблему увелечением join_buffer_size? Или еще как-то

Подобные проблемы лучше решать оптимизацией запросов или структуры БД, чем добавлением ресурсов.

Читайте про Slowloris attack и как с ним бороться.

Нормальные злобные боты, которые хотят спарсить ваш сайт или нащупать уязвимости, точно не будут делать 15 запросов с одного IP.

3-4, максимум 5. И больше вы их никогда не увидите.

Dram:
Ну че-то подозрительно сотни (а то и более 1000) запросов на мой скромный сайт от офисного планктона Майкрософта....

Тогда остаётся два варианта:

1. Боты стали насколько умными, что прикидываются живыми посетителями

2. Часть айпишников сдали под прокси. Типа режим "Интернет-эксплорер Турбо"

:)

Dram:
А вот пример - 13.93.82.28 , написано Microsoft Corporation, а рефер такой

Это нормально? Почему не пишет что бот?

еще пример 52.169.88.181, написано Microsoft Corporation, а рефер такой

А вы думаете, что в сетях Майкрософт™©® только боты водятся? :)

У них ещё и какое-то количество живых людей работает. Делают виндовс, офис и пр.

Большинство из штатов, потому что в штатах располагаются самые жирные "мусорохранилища" — Amazon, RackSpace, DigitalOcean и пр.

Dram:
53 52.166.132.198
47 52.178.38.104
44 52.178.222.249
44 52.178.222.111
44 52.178.151.184

Это же MSN

Всего: 6067