- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
А если нет - как добавить условие чтобы затронуло только тех у кого есть комменты?
Тогда так:
update firm set created = IFNULL(DATE_SUB((select min(comments.created) from comments where firm.Id = object_id group by object_id), INTERVAL 1 MONTH), firm.created);
Не вижу в вашем варианте "минус месяц" от даты коммента при обновлении поля крейтед у фирмы
ну -/+ вы можете добавить сами:) - я только принцип описал (выше написали как менять дату DATE_SUB)
Синтаксис неправильный, мускуль ругается
Вероятно нужно как то назначить таблицы по типу
база.firm AS t2 и т.п. , пробую найти примеры...
Синтаксис неправильный, мускуль ругается
Вероятно нужно как то назначить таблицы по типу
база.firm AS t2 и т.п. , пробую найти примеры...
имя поля правильное подставьте (дата из таблицы комментов)
перепроверил все, да была ошибка, все поправил в итоге запрос
как завис на минуту с чем то так и вывалился с ошибокой 504 по тайтауту.
Решил я проверить на одной фирме добавив в запрос
все равно запрос завис и ничем не закончился
P.S. таблица комментов большая (более 300k записей), но почему даже по одной фирме запрос не отработал
попробуйте просто селект/EXPLAIN сделать и посмотрите что там у вас с индексами.
select * from comments where firm_id=some_id order by data_comment
есть ли покрывающий индекс по firm_id и data comment для таблицы comments?
Эти таблицы проиндексированы в доль и поперек ибо они самые ходовые на сайте. На всех полях индексы есть.
Эксплейн показывает что на скрине.
P.S. я попробовал добавить условие
решил обновлять по категориям. Эксплейн тут же показал сокращение графы DEPENDENT SUBQUERY с 300K до 4 !!!! Но все равно запрос виснет
Попробовал выполнить эксплейн части запроса
В итоге -
rows - 149941 Using index condition
Если я правильно понимаю. Запрос виснет потому что кол-во фирм умножаются на 149941
в результате запрос пытается перебрать 3 млрд.!!! строк? Я все верно понял?
---------- Добавлено 29.01.2018 в 13:44 ----------
Можно по другому:
1. Найти все фирмы, у которых поле created младше чем самый старый коммент,
например created = 2015-07-10 16:20:00
а самый старый коммент для фирмы с created = 2013-07-10 16:20:00
2. Обновить created у этих фирм сделав его на месяц старше самого старого коммента
Эти таблицы проиндексированы в доль и поперек ибо они самые ходовые на сайте. На всех полях индексы есть.
Эксплейн показывает что на скрине.
P.S. я попробовал добавить условие
решил обновлять по категориям. Эксплейн тут же показал сокращение графы DEPENDENT SUBQUERY с 300K до 4 !!!! Но все равно запрос виснет
так в подзапросе индексов нет/ не используется (using where - получаем все записи, потом начинаем "фильтровать" условие).
а где условие группировки?
скиньте скрипт создания таблицы (с индексами)
CREATE TABLE `comments` (
`id` int(11) NOT NULL,
`object_group` varchar(32) NOT NULL,
`object_id` int(11) NOT NULL,
`created` datetime NOT NULL,
`ip` varchar(64) NOT NULL,
`user_id` int(11) NOT NULL,
`rate` int(11) NOT NULL,
`country` varchar(64) NOT NULL,
`status` int(11) NOT NULL,
`username` varchar(128) NOT NULL,
`email` varchar(64) NOT NULL,
`isgood` int(11) NOT NULL,
`ispoor` int(11) NOT NULL,
`description` text NOT NULL,
`revision` int(11) NOT NULL,
`links` text NOT NULL,
`images` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `comments`
--
ALTER TABLE `comments`
ADD PRIMARY KEY (`id`),
ADD KEY `user_id` (`user_id`),
ADD KEY `index7` (`revision`),
ADD KEY `created` (`created`),
ADD KEY `ip-country` (`country`,`ip`) USING BTREE,
ADD KEY `object_group` (`object_group`,`object_id`) USING BTREE,
ADD KEY `status` (`status`),
ADD KEY `userid_id` (`user_id`,`id`),
ADD KEY `object_group_2` (`object_group`,`object_id`,`rate`) USING BTREE;
ФИРМЫ
--
CREATE TABLE `firm` (
`id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`section_id` int(11) NOT NULL,
`city_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
`alias` varchar(255) CHARACTER SET utf8 NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`name` varchar(255) CHARACTER SET utf8 NOT NULL,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
`keywords` text CHARACTER SET utf8 NOT NULL,
`description` text CHARACTER SET utf8 NOT NULL,
`header` varchar(255) CHARACTER SET utf8 NOT NULL,
`text` text CHARACTER SET utf8 NOT NULL,
`preview_src` varchar(255) CHARACTER SET utf8 NOT NULL,
`preview_alt` varchar(255) CHARACTER SET utf8 NOT NULL,
`preview_title` varchar(255) CHARACTER SET utf8 NOT NULL,
`preview_border` int(11) NOT NULL,
`reviews` datetime NOT NULL,
`rate` int(11) NOT NULL,
`vote` int(11) NOT NULL,
`average` float NOT NULL,
`comments` int(11) NOT NULL,
`count_agents` int(11) NOT NULL,
`count_doctors` int(11) NOT NULL,
`count_images` int(11) NOT NULL,
`count_stock` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `firm`
--
ALTER TABLE `firm`
ADD PRIMARY KEY (`id`),
ADD KEY `group_id` (`group_id`),
ADD KEY `average` (`average`),
ADD KEY `name` (`name`),
ADD KEY `category_id` (`category_id`),
ADD KEY `section_id` (`section_id`),
ADD KEY `city_id` (`city_id`);