SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#26 05.05.2014 13:23:22

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

В теории можно использовать партиционирование, почитайте про engine=mrg_myisam.
Можно вообще слить все таблицы в одну.
И посмотрите топик http://sqlinfo.ru/forum/viewtopic.php?id=2264


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#27 05.05.2014 13:28:48

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

В теории можно использовать партиционирование, почитайте про engine=mrg_myisam.
Можно вообще слить все таблицы в одну.
И посмотрите топик http://sqlinfo.ru/forum/viewtopic.php?id=2264

А если сделать вообще 1 таблицу MyISAM с данными из всех таблиц. Строк получится около 4 500 000. Может на приктике сталкивались с таким, как такое действие отразится на нагрузке?

Неактивен

 

#28 05.05.2014 13:30:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Смотря что за запросы идут к той таблице, какие индексы там стоят, итп. Вы попробуйте wink, иногда преждевременная оптимизация - зло.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#29 05.05.2014 13:35:10

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Понял )) Спасибо!
А как правильно замерить скорость обработки запроса?

Неактивен

 

#30 05.05.2014 13:36:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Засеките время до и после выполнения запроса, и посмотрите разницу.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#31 05.05.2014 13:56:01

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Даже если сделать 51 таблицу, то использование Union создает очень длинный запрос. Вообще какая максимальная длина у запроса и как его укоротить? Может есть еще возможности, кроме union?

Неактивен

 

#32 06.05.2014 18:18:15

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Я же указал возможности избежать union. Про максимальный размер запроса смотрите тут.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#33 07.05.2014 12:25:39

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

Я же указал возможности избежать union. Про максимальный размер запроса смотрите тут.

Спасибо!
А можете объяснить почему не срабатывает запрос SELECT * FROM table1, table2, table3 WHERE id=1 ?

Неактивен

 

#34 07.05.2014 12:29:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Подозреваю, что из-за того, что столбец id есть и у table1 и у table2 и у table3.
Попробуйте
SELECT * FROM table1, table2, table3 WHERE table1.id=1;
а лучше
SELECT * FROM table1 t1, table2 t2, table3 t3 WHERE t1.id=1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#35 11.05.2014 11:42:14

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

С выбором вроде разобрался. Но теперь столкнулся с проблемой обновления двух значений в тех же самых таблицах. Сейчас для обновления двух столбцов datastp и status в нескольких строоках применяется запрос в цикле for. Сам запрос выглядит так UPDATE table1 SET status=постоянное_значение, datastp=индивид_значение_у_каждой_строки WHERE id=значение .
Пожалуйста подскажите, как правильно составить запрос чтобы обновить значения сразу в нескольких строках одной таблицы. По возможности без использования UNION и с мелким количеством запросов

Отредактированно klk.pma (11.05.2014 11:43:22)

Неактивен

 

#36 11.05.2014 11:46:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

В рамках обновления одной таблицы Вы можете использовать конструкцию не
WHERE id=значение
а
WHERE id In (значение1,значение2,значение3,...,значениеn)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#37 11.05.2014 12:01:41

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

В рамках обновления одной таблицы Вы можете использовать конструкцию не
WHERE id=значение
а
WHERE id In (значение1,значение2,значение3,...,значениеn)

Ее можно испоьзовать , если вносить одинаковые значения во все строки. А у меня только значение status статическое, а для datastp используются разные значения. Поэтому и возник вопрос о правильном составлении запроса. С учетом этой особенности, как правильно его составить? Вообще есть такая возможность в sql?

Отредактированно klk.pma (11.05.2014 12:12:57)

Неактивен

 

#38 11.05.2014 12:12:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Хехм, ну если в разные строки в зависимости от разных условий разные значения, то либо что-то сложное с case when end мутить, либо просто разными запросами.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#39 11.05.2014 12:15:31

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

То есть из простых вариантом самым оптимальным остается UNION?

Отредактированно klk.pma (11.05.2014 12:16:10)

Неактивен

 

#40 11.05.2014 12:26:53

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Стоп, мы говорим про update или про селект? в случае update'а какой может быть union, Вы о чем?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#41 11.05.2014 12:44:42

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Вот это меня и интересует. Как можно сократить количество запросов Update. Может их можно как-то объединить?

Неактивен

 

#42 11.05.2014 12:47:05

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Давайте формализуем smile. Опишите в контексте конкретных таблиц, полей, значений.
Вот есть у нас две таблицы t1, t2, в них есть поле f1,f2, в них значения v1,v2, исходно набор значений такой-то, на выходе хотим получить такой-то.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#43 11.05.2014 13:07:13

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

) хорошо. Есть таблицы t1, t2, t3. В каждой таблице есть 4 столбца (id, status, dataend' datastp), они одинаковые по названию типу во всех таблицах. Dataend всегда имеет цифровое значение более 0. Datastp = 0. При обновлении строк надо изменить status на 2, а datastp = dataend в одной таблице

Неактивен

 

#44 11.05.2014 14:54:15

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Халтура! Вы не привели наборы данных - исходный и желаемый smile!

При обновлении строк надо изменить status на 2, а datastp = dataend в одной таблице

UPDATE `t1` SET status = 2, datastp = dataend;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson