Задавайте вопросы, мы ответим
Вы не зашли.
В базе много таблиц, все одинаковой структуры, нужно из каждой взять по одному значению и поместить во временно созданную таблицу.
И так мои эксперименты:
Так работает с одной таблицей:
Неактивен
Попробуйте через UNION
Неактивен
Изначально все данные лежали в одной таблице, но запрос вида
Неактивен
Изначально все данные лежали в одной таблице, но запрос вида
SELECT ... GROUP BY ... ORDER BY ... LIMIT ...
Приведите полностью текст запроса (и структуру таблички, включая индексы). Возможно, получится ускорить.
Проблема в том, что GROUP BY никак не может быть оптимизирован если верит документации к MySQL.
ТОЙ документации, где Вы это прочли - не верьте . Абсолютно ложное утверждение.
Возможно, что в Вашей ситуации и стоит разнести данные по разным таблицам, такое бывает, но хотелось бы убедиться в необходимости ).
Неактивен
Неактивен
там нету ничего особого, индекс на том столбце по которому ордеринг идёт.
Ваш пример не прошёл, вот что выдаёт "Incorrect usage of UNION and ORDER BY"
Неактивен
Marianna написал:
там нету ничего особого, индекс на том столбце по которому ордеринг идёт.
Ваш пример не прошёл, вот что выдаёт "Incorrect usage of UNION and ORDER BY"
Да, Вы правы, надо было в скобки брать подвыбрки. Попробуйте вот так:
INSERT INTO `test1a`.`test`
(SELECT * FROM `test1`.`9a94e1` ORDER BY last_use_time ASC LIMIT 1)
UNION
(SELECT * FROM `test1`.`9b94e2` ORDER BY last_use_time ASC LIMIT 1)
UNION
...
UNION
(SELECT * FROM `test1`.`9b94e10` ORDER BY last_use_time ASC LIMIT 1);
Неактивен
Marianna написал:
SELECT * FROM table GROUP BY sid ORDER BY time ASC LIMIT 1000
Такой запрос некорректен по нескольким причинам.
1) Если Вы группируете по полю sid, то выбирать можно либо поле sid, либо остальные, но подействовав на них агрегирующей функцией. Что-то вроде
SELECT sid,max(time) FROM table GROUP BY sid ORDER BY time
2) Если Вы группируете по sid, то каким образом Вы результат хотите отсортировать то time? Это просто невозможно, так что запрос некорректен.
Неактивен
Сейчас гляну, что у меня имеется, у меня нету прямого доступа к скриптам, сказали как есть, и что надо провер
Неактивен
Как бы правильно объяснить
Есть таблица, у неё есть столбец sid по которому нужно групировать, и столбец time по которому нужно с каждой группы максимальное значение получить. Я не знаю как там запрос написан, нету его у меня, мне поставили задачу, обойти GROUP BY
Неактивен
Marianna написал:
Как бы правильно объяснить
Есть таблица, у неё есть столбец sid по которому нужно групировать, и столбец time по которому нужно с каждой группы максимальное значение получить. Я не знаю как там запрос написан, нету его у меня, мне поставили задачу, обойти GROUP BY
То, что Вы написали решается в лоб запросом:
SELECT max(time), sid FROM mytable group by sid;
Если создать составной индекс (sid, time), то тогда вообще хорошо, выбор данных идёт по индексу - достаточно шустро.
Посему постановка задачи - обойти group by кажется мне очень странной .
Но если уж так надо: обойдите в цикле все sid'ы, и выберите запросом на каждый из них max(time).
Неактивен