powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join 1 большой или 2-х маленьких таблиц
48 сообщений из 48, показаны все 2 страниц
join 1 большой или 2-х маленьких таблиц
    #39348650
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Вопрос новичка (да и может обсуждалось, не нашел):

Что быстрее (лучше?) два join одной большой таблицы (as tab1 ... as tab2) или два join маленьких разных таблиц?

Пример есть картотека, в ней шкафы с 2 полками(!!! только 2 и никак иначе), в которых могут находиться различные предметы.
Запросы - берем шкаф и смотрим что и на какой полке лежит.
Таблица ШКАФ - id,name
Таблица ПРЕДМЕТ - id,name

А вот дальше вопрос:

можно сделать 2 таблицы ПОЛКА1 и ПОЛКА2 в каждой поля id, id_шкафа, id_предмета. И запрос делать так:
Код: sql
1.
2.
3.
4.
5.
Select ШКАФ.id, ШКАФ.name, ПРЕДМЕТ1.name as p1, ПРЕДМЕТ2.name as p2  from ШКАФ 
inner join ПОЛКА1 on ПОЛКА1.id_шкафа = ШКАФ.id
inner join ПРЕДМЕТ1 on ПРЕДМЕТ1.id_шкафа = ПОЛКА1.id_предмета
inner join ПОЛКА2 on ПОЛКА2.id_шкафа = ШКАФ.id
inner join ПРЕДМЕТ2 on ПРЕДМЕТ2.id_шкафа = ПОЛКА2.id_предмета



Либо сделать одну таблицу ПОЛКА, но в ней указать ключ разделения, т.е. id, id_шкафа, id_предмета, KEY_ПОЛКА
и тогда:
Код: sql
1.
2.
3.
4.
5.
Select ШКАФ.id, ШКАФ.name, ПРЕДМЕТ1.name as p1, ПРЕДМЕТ2.name as p2  from ШКАФ 
inner join ПОЛКА as ПОЛКА1 on ПОЛКА1.id_шкафа = ШКАФ.id and KEY_ПОЛКА=1
inner join ПРЕДМЕТ1 on ПРЕДМЕТ1.id_шкафа = ПОЛКА1.id_предмета
inner join ПОЛКА as ПОЛКА2 on ПОЛКА2.id_шкафа = ШКАФ.id and KEY_ПОЛКА=2
inner join ПРЕДМЕТ2 on ПРЕДМЕТ2.id_шкафа = ПОЛКА2.id_предмета



Естественно во втором случае таблица ПОЛКА будет равняться (по кол-ву строк) сумме (ПОЛКА1 + ПОЛКА2) в первом варианте.

Какой вариант лучше? Или может вообще лучше делать иначе? (но какой из этих вариантов лучше - все равно интересно)
PS. Перемещения с полки на полку практически нет.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348788
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saya812,

Нужны 2 таблицы - место хранения и объект хранения.
Для выбора потребуется 1 жойн.
Место хранения должно содержать и номер шкафа, и номер полки (лучше сквозной, т.е. уникальный)
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348796
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это если предметы уникальны. Если нет - потребуется связь многие со многими через промежуточную таблицу - объект на хранении
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348797
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Три таблицы:
Шкафы
Полки
Предметы

Шкафы: id_шкафа(AI), ОписаниеШкафа
Полки: id_полки(AI), ОписаниеПолки, id_шкафа
Предметы: id_предмета(AI), ОписаниеПредмета, id_полки

Нельзя ставить в одну таблицу Предметы id_полки и id_шкафа
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348801
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
id_Предмета, ОписаниеПредмета, id_полки
FROM 
Предметы 
WHERE 
id_полки in 
(SELECT id_полки FROM Полки WHERE id_шкафа=НужныйНомерШкафа)
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348805
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моей схеме должно быть так:
Шкаф 1 содержит полки 1 и 2; полка 1 содержит предметы 1,2,3,4; полка 2 содержит предметы 5,6,7,8;
Шкаф 2 содержит полки 3 и 4; полка 3 содержит предметы 9,10,11,12; полка 2 содержит предметы 13,14,15,16;

Кстати предметы на полках могут быть не уникальными
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348869
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица шкафов.
Таблица полок, ссылающаяся на таблицу шкафов.
Таблица предметов.
Таблица соответствия предмет-полка.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348871
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно криво написал - таблица "предмет" - фактически справочник предметов. То есть там должны быть уникальные предметы. Но в шкафу эти предметы могут повторяться, и сочетаться в любых комбинациях.

авторпотребуется связь многие со многими через промежуточную таблицу
В качестве этой таблицы у меня выступает таблица "ПОЛКА" - она связывает место хранения "ШКАФ" и объект хранения "ПРЕДМЕТ".
Объект "полка" фактически не существует - у него нет никаких свойств, только номер 1 или 2.


авторТри таблицы:
Шкафы
Полки
Предметы

Шкафы: id_шкафа(AI), ОписаниеШкафа
Полки: id_полки(AI), ОписаниеПолки, id_шкафа
Предметы: id_предмета(AI), ОписаниеПредмета, id_полки
У предметов много уникальных свойств и хранить их тысячами раз не хотелось бы - таблица "предметы" в это случае будет разбита на две - во вторую будут вынесены "ОписаниеПредмета" (которые уникальны), и опять получаем многие к многим...
авторШкаф 1 содержит полки 1 и 2; полка 1 содержит предметы 1,2,3,4; полка 2 содержит предметы 5,6,7,8;
Шкаф 2 содержит полки 3 и 4; полка 3 содержит предметы 9,10,11,12; полка 2 содержит предметы 13,14,15,16;
Не совсем :
Шкаф 1 содержит полки 1 и 2; полка 1 содержит предметы 1*100,2*50,3*20,4; полка 2 содержит предметы 1*50,2*1000,3*10,8;
И т.д.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348876
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaТаблица шкафов.
Таблица полок, ссылающаяся на таблицу шкафов.
Таблица предметов.
Таблица соответствия предмет-полка.
Да, все так - только т.к. полок реально нет и они не нужны - это и есть таблица соответствия шкаф-предмет. Только нужно еще добавить 1 свойство (bool) в это соответствие.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348891
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812и они не нужны
Если верить тому, что пишется выше - нужны.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348922
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЕсли верить тому, что пишется выше - нужны.
Похоже я что-то туплю, и уже начинаю это чувствовать... Еще пару магических пенделей и...

По другому - давайте заменим полку любым булевым определением - например цветом (белый или черный)

есть справочник предметов id, prop
есть таблица (справочник) шкафов - id, prop

Нужна связывающая таблица - шкаф-предмет с доп свойством "цвет"...
таблица ШП - id, id-шкафа, id-предмета, цвет.
но join-а все равно 2 для выбора.

В общем похоже не до конца понимаю "многое к многому", пошел читать.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348951
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
add:
А еще - если мне надо получить таблицу с колонками:
шкаф, черный предмет, белый предмет
связывающую таблицу мне придется 2 раза подключать? И не будет ли лучше ее разбить на две (по цвету) и подключать две разные но маленькие вместо подключения двух раз одной большой.

Или такую таблицу лучше формировать уже сторонними средствами, получая от базы простую "шкаф, предмет, цвет"?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39348995
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812предмет с доп свойством "цвет"то есть цвет - это атрибут предмета, и никак не связан ни со шкафом, ни с тем, в каком шкафу он лежит.
Чую, ты доупрощался...
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349003
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Булевое значение - не годиться.

Нужно оставить как я написал. Только из таблицы Предметы убрать id_полки
авторТри таблицы:
Шкафы
Полки
Предметы

Шкафы: id_шкафа(AI), ОписаниеШкафа
Полки: id_полки(AI), ОписаниеПолки, id_шкафа
Предметы: id_предмета(AI), ОписаниеПредмета

Нельзя ставить в одну таблицу Предметы id_полки и id_шкафа

И добавить четвертую таблицу ТблПредметыНаПолках: id_пнп(AI), id_полки, id_предмета, КоличествоПредметовПокладенныхНаПолку

Подозреваю КоличествоПредметовПокладенныхНаПолку будет у Вас всегда 1 или если Вы их туда кладете пачками, то более.

Таблица ТблПредметыНаПолках будет иметь вид
Код: plaintext
1.
2.
3.
4.
5.
id_пнп(AI), id_полки, id_предмета, КоличествоПредметовПокладенныхНаПолку
1              1            2                 2 
2              2            3                 1
3              1            2                 1
4              3            5                 5  

Запрос из первого поста ТС будет иметь вид
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
id_Предмета, ОписаниеПредмета, id_полки, SUM(КоличествоПредметовПокладенныхНаПолку)
FROM 
ТблПредметыНаПолках JOIN Предметы ON Предметы.id_полки=ТблПредметыНаПолках.id_полки
WHERE 
Полки.id_полки in 
(SELECT id_полки FROM Полки WHERE id_шкафа=НужныйНомерШкафа) GROUP BY id_Предмета
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349006
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я правильно понял что булевое значение для определения IF (полка=верхняя) THEN bool=TRUE else bool=FALSE
Да?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349018
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такс...
Вы написали изначально, что полки есть и их 2. Теперь их нет. Если их нет, то таблицу Полки убираем. Таблица ПредметыНаПолках должна ссылаться на таблицу Шкафы.

Три таблицы:
Шкафы
Полки
Предметы

Шкафы: id_шкафа(AI), ОписаниеШкафа
ТблПредметыВШкафах: id_пнп(AI), id_шкафа, id_предмета, КоличествоПредметовПокладенныхВШкаф
Предметы: id_предмета(AI), ОписаниеПредмета

Таблица ТблПредметыВШкафах будет иметь вид

Код: plaintext
1.
2.
3.
4.
id_пнп(AI), id_шкафа, id_предмета, КоличествоПредметовПокладенныхНаПолку
1              1            2                 2 
2              2            3                 1
3              1            2                 1
4              3            5                 5  
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
id_Предмета, ОписаниеПредмета, id_шкафа, SUM(КоличествоПредметовПокладенныхВШкаф)
FROM 
ТблПредметыВШкафах JOIN Предметы ON Предметы.id_шкафа=ТблПредметыВШкафах.id_шкафа
WHERE 
id_шкафа=НужныйНомерШкафа GROUP BY id_Предмета
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349045
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня ошибка
Код: sql
1.
Предметы.id_предмета=ТблПредметыВШкафах.id_предмета
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349120
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторто есть цвет - это атрибут предмета, и никак не связан ни со шкафом, ни с тем, в каком шкафу он лежит.
Чую, ты доупрощался...
Я просто попытался пример подобрать похожий. Идея просто в том что связь многие со многими + атрибут, который не можно выделить отдельно.
CosmagnettoЯ правильно понял что булевое значение для определения IF (полка=верхняя) THEN bool=TRUE else bool=FALSE
Да?
Да, можно и так.
авторid_пнп(AI), id_шкафа, id_предмета, КоличествоПредметовПокладенныхНаПолку
1 1 2 2
Вот тут я усложнил (и больше запутал) пример написав о "кол-ве предметов"
Вот еще пример:
Таблица СЫР(на складе)
Код: plaintext
1.
2.
3.
4.
id, prop
1    aa
2    bb
3    cc
 .....
Справочник СТРАНЫ
Код: plaintext
1.
2.
3.
id, name
1    ру
2    гер
3    ита
А в выборке нужно в 95% случаев получать таблицу вида:
id_сыра, prop_сыра, страны экспорта, страны импорта
Тогда связывающая таблица СЫР_СТРАНА будет
Код: plaintext
1.
2.
3.
4.
5.
id, id_СЫР, id_СТРАНЫ, экспорт-импорт(bool)
1       1          1               0
2       1          2               0
3       1          3               1
4       2          1               0
5       2          2               1

А получить надо таблицу типа:

Код: plaintext
1.
2.
3.
4.
id_СЫР   prop_сыр     экспорт        импорт
     1       aa          ру           ита  
     1       aa          гер          ита  
     2       bb          ру           гер  
     3       сс          -            - 

Я пишу запрос
Код: sql
1.
2.
3.
4.
5.
6.
Select СЫР.id, СЫР.prop, exp.name as exp, imp.name as imp 
from `СЫР`
inner join СЫР_СТРАНА as exp1 on exp1.id_СЫР = СЫР.id and exp1.экспорт-импорт=0
inner join СТРАНА as exp on exp.id=exp1.id_СТРАНЫ
inner join СЫР_СТРАНА as imp1 on imp1.id_СЫР = СЫР.id and exp1.экспорт-импорт=1
inner join СТРАНА as imp on imp.id=imp1.id_СТРАНЫ


Но чую что это какой-то индусский метод))))
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349132
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мутно что-то...
я так и не понял задачу. Из примера (результата) сформировать себе задачу и соответственно решение не получается
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349154
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812Идея просто в том что связь многие со многими + атрибут, который не можно выделить отдельно.
Это ЧЕЙ, ипона мать, атрибут? какой сущности атрибут, в такую таблицу и заколачивай. А у тебя атрибут одной сущности запихивается в таблицу, где хранятся экземпляры другой сущности - и чего, спрашивается, косяки прут?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349167
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЭто ЧЕЙ, ипона мать, атрибут? какой сущности атрибут, в такую таблицу и заколачивай. А у тебя атрибут одной сущности запихивается в таблицу, где хранятся экземпляры другой сущности - и чего, спрашивается, косяки прут?

Это атрибут страны - то есть страна либо экспорта либо импорта.
Можно "заколотить" его в справочник СТРАНЫ, но тогда этот справочник станет в 2 раза больше - то есть получиться что каждая строчка в нем будет дублироваться (до одного бул. значения).
Так стоит делать?
Но с точки зрения запроса это мало на что повлияет просто "and exp1.экспорт-импорт=1" перейдет в другой join.

авторМутно что-то...
я так и не понял задачу.
Нужно получить таблицу всех значений СЫРОВ с колонками ЭКСПОРТ и ИМПОРТ, содержащими страны (для удобных сортировок, выборок).
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349170
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saya812Но с точки зрения запроса это мало на что повлияет просто "and exp1.экспорт-импорт=1" перейдет в другой join.

Нет, тут ошибся, повлияет - это условие совсем отвалится.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349177
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА в выборке нужно в 95% случаев получать таблицу вида:
id_сыра, prop_сыра, страны экспорта, страны импорта
Тогда связывающая таблица СЫР_СТРАНА будет
Как это в 95% случаев? Селекты работают в 100% случаев и выдают выборки на 100% соответствующие заданным значениям.

Я когда про задачу спрашивал, я ожидал услышать это:

Сделать выборку пар стран, которые продают друг другу сыры с указанием типа сыра

То есть
рус продает гер сыр 1
гер продает рус сыр 2
рус продает ита сыр 1
гер продает ита сыр 3

Я правильно угадал задание? ))))))))))))
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349186
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CosmagnettoКак это в 95% случаев? Селекты работают в 100% случаев и выдают выборки на 100% соответствующие заданным значениям.

Это я про то что это будет основным запросом. То есть понятно что будет и другая работа с таблицей, но основная именно эта.
CosmagnettoТо есть
рус продает гер сыр 1
гер продает рус сыр 2
рус продает ита сыр 1
гер продает ита сыр 3

Я правильно угадал задание? ))))))))))))
Да, только еще в этой таблице должны быть сыры без стран экспорта и/или импорта
например строка
"пусто" продает "пусто" сыр 4

То есть мы должны понимать что сыр есть, но стран у него нет.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349191
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может страна и покупать и продавать один и тот же сыр?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349197
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проще говоря нужно создать таблицу, которая показывает спрос и предложение по каждому товару, также вывести строки где присутствует только спрос или только предложение, и товары по которым отсуствиет спрос и предложение

Да?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349200
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812Это атрибут страны - то есть страна либо экспорта либо импорта.
То есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349216
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CosmagnettoА может страна и покупать и продавать один и тот же сыр?
Может.
CosmagnettoПроще говоря нужно создать таблицу, которая показывает спрос и предложение по каждому товару, также вывести строки где присутствует только спрос или только предложение, и товары по которым отсуствиет спрос и предложение

Да?
Да (неуверенно, усложнили вы как-то задачу, введя новую терминологию спроса и предложения)

AkinaТо есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много.
Мне кажется вы усложняете... До конца не понял подхода, но создание еще связи между "экспортер/импортер" и "страна" еще сильнее усложнит наш пример (еще дальше отодвинет от конечного решения).
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349224
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaТо есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много.
Страна может являться как экспортером так и импортером. Я этот атрибут предложил пихать в промежуточную таблицу (таблицу связывающую СЫР и СТРАНУ). Ну а по сути - да это атрибут страны в определенных условиях.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349242
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349243
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812по сути - да это атрибут страны в определенных условияхНет. Это мультиатрибут. И потому много-ко-много. Более того - это мультиатрибут не страны, а пары Страна - Товар (запросто же может быть, что пармезан страна экспортирует, а чечил импортирует).
Но если ты всё же делаешь это мультиатрибутом страны, и при этом хочешь уйти от промежуточной таблицы - сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349264
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНет. Это мультиатрибут. И потому много-ко-много. Более того - это мультиатрибут не страны, а пары Страна - Товар (запросто же может быть, что пармезан страна экспортирует, а чечил импортирует).
Но если ты всё же делаешь это мультиатрибутом страны, и при этом хочешь уйти от промежуточной таблицы - сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр.
Погоди, вопрос не к справочнику страны.
Akinaэто мультиатрибут не страны, а пары Страна - Товар
Это абсолютно так. Но вопрос не в этом - мне надо соединить многое ко многим сыр и страны, в этих соединениях указать - чем является страна - импортером или экспортером. А дальше (основная цель) выборка всех сыров с колонками "страны экспорта", "страны импорта". И вот тут начальный вопрос - можно сделать 2 соединительные таблицы "страны экспорта" и "страны импорта", а можно одну, но большую - "страны", а в ней атрибут "экспорт/импорт".
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349270
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Akina]saya812сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр.
нет смысла
Тру - импортер, Фолс - экспортер, Null - ни то ни другое
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349275
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CosmagnettoТру - импортер, Фолс - экспортер, Null - ни то ни другоеА если и то, и другое?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349276
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
две строки подряд
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349278
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812А дальше (основная цель) выборка всех сыров с колонками "страны экспорта", "страны импорта". И вот тут начальный вопрос - можно сделать 2 соединительные таблицы "страны экспорта" и "страны импорта", а можно одну, но большую - "страны", а в ней атрибут "экспорт/импорт".Ну это по сути же пивот, а в реализации, вероятно, GROUP BY + GROUP_CONCAT? Ну тогда проще по тексту использовать одну копию таблицы и условие в аргументе функции, а по производительности лучше два раздельных запроса и UNION ALL.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349280
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cosmagnettoдве строки подрядЭто ты делаешь две страны из одной. О чём говорилось выше...
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349281
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чувствуется мне нужно копать в сторону нескольких связок (SELECT + INSERT IGNORE)
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349284
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaCosmagnettoдве строки подрядЭто ты делаешь две страны из одной. О чём говорилось выше...
В промежуточной таблице - да.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349286
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812 ,

Базовую таблицу (в последнем случае "СЫР") перебирать придется всю, тупо в лоб, индексы тут не помогут, если только требуемое упорядочивание не совпадет с индексом)

Связывающая (или развязывающая, вопрос терминологии) таблица может быть одна с дополнительным признаком, или их может быть несколько, для каждого признака своя. В любом случае для ускорения запроса на эту (эти) таблицу необходимо навесить индекс.

Скорость поиска по индексу для большой и огромной таблиц примерно одинаковы, поэтому разделение таблиц на несколько для каждого признака на скорость не повлияет.

Суммарное число записей в связывающих таблицах по признакам и в одной таблице с дополнительным полем тоже одинаковы.

Небольшое увеличение объема данных в одной таблице (за счет дополнительного поля "признак") вполне компенсируется организацией и поддержкой нескольких однотипных таблиц, во всяком случае отдельного обсуждения не заслуживает.

Включение в индекс общей таблицы несколько увеличит размер индексов по сравнению с индексами раздельных таблиц, но тоже не вижу в этом большой разницы.

Очевидное преимущество одной таблицы - масштабируемость. Так, выпустили новую модель шкафа с тремя полками - и не придется переписывать ничего (ну, кроме разве что контроля номера полки при вводе данных).

Выводы делать не буду ;-)
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349288
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CosmagnettoВ промежуточной таблице - да.Ммм... что-то я теряю нить обсуждения... мне казалось, что копья ломаются именно из-за нежелания делать связующую таблицу.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349304
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Вроде все понятно, в рамках вопроса "что быстрее / лучше" ответ получил. А по сути запроса так делаю - на join-ах или как-то иначе лучше?

AkinaМмм... что-то я теряю нить обсуждения... мне казалось, что копья ломаются именно из-за нежелания делать связующую таблицу.
Нет, связывающую все равно придется) Я другого способа не вижу...
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349312
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812по сути запроса так делаю - на join-ах или как-то иначе лучше?
А как еще-то? SQL работает на JOINах, даже если это выглядит как декартово произведение, или как вложенный запрос
Все равно требуется поиск в таблицах и объединение результатов
Код: sql
1.
2.
3.
4.
5.
6.
select s.id, s.prop, e.name `from`, i.name `to`
from `СЫР` s
left join `СЫР_СТРАНА` se on se.id_СЫР=s.id and se.экспорт_импорт=0
left join `СТРАНА` e on e.id=se.id_СТРАНЫ
left join `СЫР_СТРАНА` si on si.id_СЫР=s.id and si.экспорт_импорт=1
left join `СТРАНА` i on i.id=si.id_СТРАНЫ
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349316
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, или для раздельных таблиц
Код: sql
1.
2.
3.
4.
5.
6.
select s.id, s.prop, e.name `from`, i.name `to`
from `СЫР` s
left join `СЫР_СТРАНА_ЭКСПОРТ` se on se.id_СЫР=s.id 
left join `СТРАНА` e on e.id=se.id_СТРАНЫ
left join `СЫР_СТРАНА_ИМПОРТ` si on si.id_СЫР=s.id
left join `СТРАНА` i on i.id=si.id_СТРАНЫ
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349339
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Так и делал...

Спасибо всем за участие!

Если есть еще идеи (варианты) пишите.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349351
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007saya812по сути запроса так делаю - на join-ах или как-то иначе лучше?
А как еще-то? SQL работает на JOINах, даже если это выглядит как декартово произведение, или как вложенный запрос
Все равно требуется поиск в таблицах и объединение результатов
Код: sql
1.
2.
3.
4.
5.
6.
select s.id, s.prop, e.name `from`, i.name `to`
from `СЫР` s
left join `СЫР_СТРАНА` se on se.id_СЫР=s.id and se.экспорт_импорт=0
left join `СТРАНА` e on e.id=se.id_СТРАНЫ
left join `СЫР_СТРАНА` si on si.id_СЫР=s.id and si.экспорт_импорт=1
left join `СТРАНА` i on i.id=si.id_СТРАНЫ


Так это работает так, как нужно ТС?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349360
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cosmagnetto ,

ТС хотел не конкретное решение, а оптимальное решение для класса задач
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349424
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CosmagnettoТак это работает так, как нужно ТС?
Да, это работает. Но просто сейчас я переписываю код (этот писался года 3-4 назад) и задумался о его верности, в плане оптимизации - например подумал о возможности разделения на 2 разные таблицы - типа меньше строк быстрее работа... Но подумал мало-ли например 1 таблица кэшируется и второе ее подключение нечего не стоит. Или может вообще не туда копать стоит, как-то переписать иначе, без безумного кол-ва join-ов...
Но пока, как я понимаю, такое решение самое оптимальное...
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join 1 большой или 2-х маленьких таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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