Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток.
Есть таблица !
Вот зарос.
SELECT `video_id` FROM categories_videos Where category_id NOT IN (4,5) ORDER BY `categories_videos`.`video_id` ASC GROUP BY video_id
Как его подправить что бы в результате были только video_id где вообще не встречалось условие. Т.е сейчас он отдает строку с результатом
video_id => 91 и video_id => 92 а мне нужно что бы этих строк небыло.
Отредактированно Lamener (26.03.2014 16:17:18)
Неактивен
Неактивен
vasya написал:
select * from
(SELECT `video_id` FROM categories_videos GROUP BY video_id) t1
left join
(SELECT `video_id` FROM categories_videos Where category_id IN (4,5) GROUP BY video_id) t2
using(video_id) where t2.video_id is null;
Работает если ограничить до 2К ! Но очень сильно напрягает сервер. в этой таблице 137074 строк. А если без ограничения у меня виснет phpmyadmin.
Отображение строк 0 - 1999 (2000 всего, Запрос занял 2.0357 сек.)
Отредактированно Lamener (26.03.2014 21:42:53)
Неактивен
Индексы на video_id и (category_id, video_id) есть?
Неактивен
vasya написал:
Индексы на video_id и (category_id, video_id) есть?
Только у video_id есть индекс
Добавил индекс category_id
Отображение строк 0 - 1999 (2000 всего, Запрос занял 1.9792 сек.)
Чуток легче стало !
Отредактированно Lamener (26.03.2014 21:56:13)
Неактивен
Добавьте ещё составной
Неактивен
vasya написал:
Добавьте ещё составной
alter table categories_videos add index (category_id, video_id);
Добавил !
Отображение строк 0 - 1999 (2000 всего, Запрос занял 1.9657 сек.)
Неактивен
Покажите
Неактивен
vasya написал:
Покажите
show create table categories_videos;
explain extended select t1.video_id from (SELECT `video_id` FROM categories_videos GROUP BY video_id) t1 left join (SELECT `video_id` FROM categories_videos Where category_id IN (4,5) GROUP BY video_id) t2 using(video_id) where t2.video_id is null\G
show warnings\G
Обратите внимание, в запросе вместо * нужно t1.video_id
На это у меня ошибка
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\G
Неактивен
вместо \G используйте ;
Неактивен
vasya написал:
вместо \G используйте ;
Ага я уже понял !
Вот скрин
http://joxi.ru/axgzUxjKTJAnNimEbhQ
Неактивен
Результат от show warnings; обрезан
и покажите ещё show create table categories_videos;
Неактивен
vasya написал:
Результат от show warnings; обрезан
и покажите ещё show create table categories_videos;
Он тоже получется обрезанный ! Но это так phpmyadmin отображает.
http://joxi.ru/8BozUxjKTJAtNgghaWQ
Неактивен
Там есть какие-то кнопочки, чтобы развернуть ответ полностью, но лучше вообще не пользоваться им.
У вас есть возможность выполнить запрос через клиент mysql?
И вам действительно необходимо получить в ответ все 30 тыс результатов?
Неактивен
vasya написал:
Там есть какие-то кнопочки, чтобы развернуть ответ полностью, но лучше вообще не пользоваться им.
У вас есть возможность выполнить запрос через клиент mysql?
И вам действительно необходимо получить в ответ все 30 тыс результатов?
Да, есть доступ по ssh !
Нашел кнопочки
show create table categories_videos;
http://joxi.ru/Dh0zU_3JTJAJdOMc1SM
Неактивен
составной индекс у вас уже был. Так что лишний лучше удалить
Неактивен
vasya написал:
составной индекс у вас уже был. Так что лишний лучше удалить
alter table categories_videos drop index category_id;
А какой полный ответ у show warnings?
А вот у show warnings такой кнопочки нет ! (
Неактивен
Попробуйте такой вариант:
Неактивен
Lamener написал:
vasya написал:
составной индекс у вас уже был. Так что лишний лучше удалить
alter table categories_videos drop index category_id;
А какой полный ответ у show warnings?А вот у show warnings такой кнопочки нет ! (
mysql> show warnings\G
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: select `t1`.`video_id` AS `video_id` from (select `yourhub_kvs`.`ktvs_categories_videos`.`video_id` AS `video_id` from `yourhub_kvs`.`ktvs_categories_videos` group by `yourhub_kvs`.`ktvs_categories_videos`.`video_id`) `t1` left join (select `yourhub_kvs`.`ktvs_categories_videos`.`video_id` AS `video_id` from `yourhub_kvs`.`ktvs_categories_videos` where (`yourhub_kvs`.`ktvs_categories_videos`.`category_id` in (4,5)) group by `yourhub_kvs`.`ktvs_categories_videos`.`video_id`) `t2` on((`t2`.`video_id` = `t1`.`video_id`)) where isnull(`t2`.`video_id`)
1 row in set (0.00 sec)
Неактивен
Вот полный ответ!
Отредактированно Lamener (26.03.2014 23:12:32)
Неактивен
А что по времени с этим вариантом http://sqlinfo.ru/forum/viewtopic.php?pid=39393#p39393 ?
Неактивен
И ещё вы пропустили http://sqlinfo.ru/forum/viewtopic.php?pid=39391#p39391
Неактивен
vasya написал:
Ну и главное, вам действительно нужны все 30 тыс результатов?
Не всегда но может случиться и так. В итоге у меня должен получиться фид экспорта по заданным критериям. Спасибо за помощь буду пробовать.
Неактивен
vasya написал:
А что по времени с этим вариантом http://sqlinfo.ru/forum/viewtopic.php?pid=39393#p39393 ?
с добавлением в select вместо *, t1.video_id. по времени разницы нет !
Неактивен
там в подзапросе отсутствует группировка
Неактивен