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)
Наиболее оптимальный запрос
Есть таблица "рабочие". Имеет более 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:
Заранее спасибо.
Я бы все-таки попробовал через join'ы.
И нужно ли данные обо всех рабочих вытаскивать? Что вы с миллионом записей делать будете?
Цитата: Ora-cool
Индексы по полям rabochiy_id в таблицах присутствуют?
Нет не существуют.
я пишу
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) совсем не возвращает.
Хотя они есть.
Помогите пожалуйста кто чем может.:(
Цитата: swordholder
То есть данных с других таблиц (data_1, data_2) совсем не возвращает.
Хотя они есть.
Хотя они есть.
Не верю! (с)
Цитата: Ora-cool
Не верю! (с)
Если хочеш проверь
[SIZE="1"]Имена таблиц другие.[/SIZE]
Ну так а где во вложении сам запрос и его результаты?
Цитата: 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) совсем не возвращает.
Хотя они есть.
Пока что я настаиваю, что проблема у вас в данных - если запрос с left join дает null в столбцах подчиненных таблиц - значит там нет данных, связанных с главной таблицей. Если вы утверждаете, что это не так - отобразите вашу ситуацию более доходчиво.
Код: