Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наиболее оптимальный запрос

2.0K
17 декабря 2008 года
swordholder
99 / / 17.10.2006
Есть база MySQL 5.0.51

Есть таблица "рабочие". Имеет более 1 000 000 записей

CREATE TABLE `rabochie` (
`id` int(11) unsigned NOT NULL auto_increment,
`full_name` varchar(255) ,
...
...
PRIMARY KEY (`id`),
) ;

Также есть 100 таблиц связанный с таблицей рабочие.

CREATE TABLE `data_1` (
`rabochiy_id` int(11) ,
`data` text character set utf8
) ;
CREATE TABLE `data_2` (
`rabochiy_id` int(11) ,
`data` text character set utf8
) ;
..... и так далее

Таблицы data_x связаны с таблицей рабочие rabochiy.id=data_x.rabochiy_id.

Мне нужно список всех рабочих вместе с их данными со всех таблиц наиболее оптимальным способом вытащить. На php.

Каждая запись в таблице "рабочие" может иметь сколько угодно связанных с ним записей в любом или во всех таблицах data_x (data_1,data_2, data_3, ...)

И теперь вопрос: Как мне с наименьшей нагрузкой на сервер MySQL и наименьшим количеством запросов вытащить все данные с таблицы "рабочие" и все связанные записи с таблиц data_x.

Стоит ли все данные со всех таблиц скинуть на массивы и потом от туда связанно вытаскивать или же все таки лучше создать один длинный join query ?
:confused:
Заранее спасибо.
8.2K
17 декабря 2008 года
Ora-cool
211 / / 20.09.2007
Индексы по полям rabochiy_id в таблицах присутствуют?
Я бы все-таки попробовал через join'ы.
И нужно ли данные обо всех рабочих вытаскивать? Что вы с миллионом записей делать будете?
2.0K
17 декабря 2008 года
swordholder
99 / / 17.10.2006
Цитата: Ora-cool
Индексы по полям rabochiy_id в таблицах присутствуют?


Нет не существуют.

2.0K
18 декабря 2008 года
swordholder
99 / / 17.10.2006
Помогите пожалуйста создать join query
я пишу

SELECT *
FROM ((( rabochie
LEFT OUTER JOIN data_1 ON rabochie.id=data_1.rabochiy_id)
LEFT OUTER JOIN data_2 ON rabochie.id=data_2.rabochiy_id)
LEFT OUTER JOIN data_3 ON rabochie.id=data_3.rabochiy_id)

а MySQL мне возвращает данные только с последней data_3 таблицы (кроме самой таблицы rabochie)
То есть данных с других таблиц (data_1, data_2) совсем не возвращает.
Хотя они есть.
Помогите пожалуйста кто чем может.:(
8.2K
18 декабря 2008 года
Ora-cool
211 / / 20.09.2007
Цитата: swordholder
То есть данных с других таблиц (data_1, data_2) совсем не возвращает.
Хотя они есть.



Не верю! (с)

2.0K
18 декабря 2008 года
swordholder
99 / / 17.10.2006
Цитата: Ora-cool
Не верю! (с)



Если хочеш проверь

[SIZE="1"]Имена таблиц другие.[/SIZE]

8.2K
19 декабря 2008 года
Ora-cool
211 / / 20.09.2007
Ну так а где во вложении сам запрос и его результаты?
2.0K
22 декабря 2008 года
swordholder
99 / / 17.10.2006
Цитата: Ora-cool
Ну так а где во вложении сам запрос и его результаты?



SELECT *
FROM ((( rabochie
LEFT OUTER JOIN data_1 ON rabochie.id=data_1.rabochiy_id)
LEFT OUTER JOIN data_2 ON rabochie.id=data_2.rabochiy_id)
LEFT OUTER JOIN data_3 ON rabochie.id=data_3.rabochiy_id)

а MySQL мне возвращает данные только с последней data_3 таблицы (кроме самой таблицы rabochie)
То есть данных с других таблиц (data_1, data_2) совсем не возвращает.
Хотя они есть.

8.2K
23 декабря 2008 года
Ora-cool
211 / / 20.09.2007
Уважаемый автор. Если вы хотите, чтобы вам помогли, то будтье любезны нормальным образом оформлять свои вопросы и ответы. Пока что из приведенных вами постов ничего не понятно - вы скопировали запрос, во вложении совершенно другие таблицы. Нужно угадывать, как одно связанно с другим?
Пока что я настаиваю, что проблема у вас в данных - если запрос с left join дает null в столбцах подчиненных таблиц - значит там нет данных, связанных с главной таблицей. Если вы утверждаете, что это не так - отобразите вашу ситуацию более доходчиво.
341
24 декабря 2008 года
Der Meister
874 / / 21.12.2007
 
Код:
SELECT rabochie.*, data_1.*, data2.*, data3.*
FROM ((( rabochie
LEFT OUTER JOIN data_1 ON rabochie.id=data_1.rabochiy_id)
LEFT OUTER JOIN data_2 ON rabochie.id=data_2.rabochiy_id)
LEFT OUTER JOIN data_3 ON rabochie.id=data_3.rabochiy_id)
?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог