Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнить таблицу Т1 данными из таблицы Т2 по условию / 13 сообщений из 13, страница 1 из 1
24.03.2016, 19:19
    #39200070
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Добрый день!

Для работы использую dbForge Studio for MySQL, БД локальная на моем новом ноутбуке Core i5
есть несколько таблиц, но пример на основе 2 таблиц, так как он тоже не работает.

Таблица 1 = заполнено только поле Time - это время (это как бы ID), в таблице 3 млн. строк

CREATE TABLE auto.tmp_all (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Таблица 2 = заполнены все поля, в таблице 2 млн. строк
CREATE TABLE auto.andro (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Задача: Обновить все поля в Таблице1 данными из Таблицы 2 при условие что поле Time совпадает

Что я пробовал (все сводится к тому что запросы просто не выполняются - я ждал по 2 часа и ничего (( ):
1)

Код: sql
1.
2.
3.
Update tmp_all t inner join andro t1 on t.Time = t1.Time
  SET t.y = t1.y, t.z = t1.z, t.g = t1.g, t.noise = t1.noise
  Where t.Time = t1.Time



Вообщем не знаю возможно ли решить мою задачу - прошу подсказать, а то может я зря теряю время, спасибо.
...
Рейтинг: 0 / 0
24.03.2016, 19:59
    #39200089
Заполнить таблицу Т1 данными из таблицы Т2 по условию
michail_s
Код: sql
1.
2.
3.
Update tmp_all t inner join andro t1 on t.Time = t1.Time
  SET t.y = t1.y, t.z = t1.z, t.g = t1.g, t.noise = t1.noise
  Where t.Time = t1.Time

какое-то у тебя масло-масленое получилось...
...
Рейтинг: 0 / 0
24.03.2016, 20:01
    #39200090
Заполнить таблицу Т1 данными из таблицы Т2 по условию
michail_sвсе сводится к тому что запросы просто не выполняются - я ждал по 2 часа и ничего ((выдается сообщение об ошибке? или не дождался окончания выполнения операции?
...
Рейтинг: 0 / 0
24.03.2016, 22:30
    #39200153
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Добрый Э - Эх,

Ошибки не выдается, просто висит что выполняется и все на этом ..., ждал 2 часа - потом остановил.
Если делать запрос через MySQLWorkbench, то через 600 сек. выдается разрыв соединения, но ноутбук продолжает "шуметь", предполагаю, что запрос продолжает обрабатываться - хотя не знаю точно
...
Рейтинг: 0 / 0
24.03.2016, 22:37
    #39200158
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Изначально пробовал такой запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE tmp_all
  select ids.Time, andro.x, y, z, noise, androacc.speedms, acc
  from 
  (
    select Time
      from andro
    union
    select Time
      from androacc
	  ) ids
  left join andro
    on ids.Time = andro.Time
  left join androacc
    on ids.Time = androacc.Time
  



но тоже не дождаться когда обработается,
Поэтому решил сначала все время Time добавить в одну таблицу, а потом в нее данные из остальных таблиц загружать

какое-то у тебя масло-масленое получилось...
Попробовал без Where t.Time = t1.Time, но тоже никак не дождаться окончания выполнения запроса ((
...
Рейтинг: 0 / 0
24.03.2016, 23:37
    #39200170
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
michail_sДобрый день!

Для работы использую dbForge Studio for MySQL, БД локальная на моем новом ноутбуке Core i5
есть несколько таблиц, но пример на основе 2 таблиц, так как он тоже не работает.

Таблица 1 = заполнено только поле Time - это время (это как бы ID), в таблице 3 млн. строк

CREATE TABLE auto.tmp_all (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Таблица 2 = заполнены все поля, в таблице 2 млн. строк
CREATE TABLE auto.andro (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Задача: Обновить все поля в Таблице1 данными из Таблицы 2 при условие что поле Time совпадает

Что я пробовал (все сводится к тому что запросы просто не выполняются - я ждал по 2 часа и ничего (( ):
1)

Код: sql
1.
2.
3.
Update tmp_all t inner join andro t1 on t.Time = t1.Time
  SET t.y = t1.y, t.z = t1.z, t.g = t1.g, t.noise = t1.noise
  Where t.Time = t1.Time




Вообщем не знаю возможно ли решить мою задачу - прошу подсказать, а то может я зря теряю время, спасибо.



EXPLAIN, DESC <table_name>, count(1) таблиц....

МикСофт, ФАК бы какойнибудь сделать по задаванию вопросов :-)
Кажется у форума по СКЛ Сервер был такой...


michail_s ... начните замерять время с милиона на 100, потом на 10000, потом на 100К...
просто чтоб не мучатся а отлаживать на разумных часах...
...
Рейтинг: 0 / 0
25.03.2016, 06:16
    #39200236
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
javajdbcМикСофт, ФАК бы какойнибудь сделать по задаванию вопросов :-)
Кажется у форума по СКЛ Сервер был такой...Уже есть. Например, тут Правила -->Рекомендации. Вот только кто бы ещё всё это читал...
...
Рейтинг: 0 / 0
25.03.2016, 09:11
    #39200304
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
michail_sждал по 2 часа и ничего
Сначала удалите записи из Т1, имеющие соответствие в Т2. Потом безусловно вставьте записи из Т2 в Т1. Это будет гораздо быстрее.
Ну или хотя бы создайте индексы по полю Time и объявите уникальными (а то и первичными). Ещё было бы очень мудро поле переименовать - использование зарезервированных слов как-то не комильфо...
...
Рейтинг: 0 / 0
25.03.2016, 17:40
    #39200864
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Спасибо все за наводки.
Вот что сделал:

Попробовал запрос из первого поста (Попробовал только Select, а не Update) с 2.8 млн на 160 строк - обработался за 1 мин.
2.8 мин. на 700 строк обработался за 5 мин.
Вывод, если нужно обработать 70К строк, то времени нужно 500 мин. - не очень хорошо.

--------------------------------------
Опишу все с самого начала ))

Прикрепил изображения какие таблицы у меня есть в БД и сколько в каждой таблице записей.
Может я выбрал не правильный метод реализации.
Задача в следующем:
Поле Time - частично пересекается во всех таблицах, т.е. определенное значение столбца Time - может присутствовать в разных таблицах. Физицеский смысл поля Time - это время в формате Unix, поэтому оно и может повторяться в разных таблицах.
Цель:
Нужно все данные из этих таблиц объединить в одну.
Т.е. будет только один столбец Time (т.к. он единственный повторяется во всех таблицах) и далее столбцы заполненные данными из отдельных таблиц. Далее из этой общей таблицы я буду делать Select-ы по нужным условиям.

Дайте наводку как это лучше реализовать или вообще реализовать?

То что я попробовал под сполером
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select ids.Time, f_screen.value, hrv.rr, hr
  from 
  (
    select Time
      from f_screen
    union
    select Time
      from hrv
    ) ids
  left join f_screen
    on ids.Time = f_screen.Time
  left join hrv
    on ids.Time = hrv.Time


этот запрос выполнился за 30 мин.
...
Рейтинг: 0 / 0
25.03.2016, 18:44
    #39200899
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Сейчас поле Time пытаюсь сделать во всех таблицах как Primery key
с которыми уже получилось - запрос стал обрабатываться на много быстрее.

Сейчас другая проблема возникла - в таблице в которой 2 млн. записей есть дубли по столбцу Time, из-за этого не дает назначить как Primery key.

Пока использую такой запрос для поиска дублей

Код: sql
1.
select * from andro where Time IN (select Time from andro GROUP BY Time HAVING COUNT(Time)>1) order by Time;



... но уже долго выполняется ... попытаюсь пока так.
Но если у кого-то будут идеи по улучшению - буду признателен.
...
Рейтинг: 0 / 0
25.03.2016, 19:23
    #39200934
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Вообщем теперь вопрос:

как удалить из таблицы в 2 млн. строки по дублям для одного столбца Time (которое не является первичным), т.е. если в столбце Time есть дубль, то удаляем эту строку.
Спасибо
...
Рейтинг: 0 / 0
30.03.2016, 12:31
    #39204007
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
Вообщем все получилось вроде:

от дублей избавился таким запросом:
Код: sql
1.
Create TABLE gar SELECT * FROM gar1 GROUP BY Time


Т.е. если по столбцу Time были дубли, то они удалились

Поле Time назначил первичным ключом - видимо это и было проблемой со скоростью выполнения запроса))
Далее в одном запросе вставил все время в одну таблицу и сделал Left Join всех таблиц
В итоге получил таблицу с почти 3 млн. строк, запрос выполнился за 5 мин. - ОК
Всем спасибо

Может кому пригодится
...
Рейтинг: 0 / 0
30.03.2016, 13:16
    #39204049
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнить таблицу Т1 данными из таблицы Т2 по условию
michail_sесли по столбцу Time были дубли, то они удалились
Но вот загадка - какие значения легли в остальные поля, кроме поля группировки Time? Согласно документации - случайные из группы... более того - документация не гарантирует даже, что они взяты из одной и той же записи!
Так что предположение, что
michail_sМожет кому пригодится
я бы назвал весьма самонадеянным... а совет следовать тем же путём считаю безусловно "вредным советом".
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнить таблицу Т1 данными из таблицы Т2 по условию / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]