powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сджойнить 50 таблиц
25 сообщений из 52, страница 1 из 3
Сджойнить 50 таблиц
    #39344718
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как будет правильней сделать вывод всей таблицы если она состоит из 50-и столбцов в каждом из которых находятся ключи по которым подключаются таблицы. К одному столбцу подключается одна таблица. Пробовал всё это соеденить джойнами но сервер не переварил такую большую кучу. Как это всё вывести одним запросом с подстановкой данных из подключаемых таблиц?
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344736
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой смысл это выводить? всё равно глазом не окинешь, на экран не поместишь...
Раздели таблицу на несколько поменьше, сгруппировав столбцы в них по вменяемой логике и объединив их 1:1 к базовой таблице.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344779
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerПробовал всё это соеденить джойнами но сервер не переварил такую большую кучу.Как именно пробовали?
В лимит в 61 джойн не уложились?
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344783
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polger,

Вариант через подзапросы в секции SELECT тоже пробовали?
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344785
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina по вменяемой логике
Не совсем понял, как это по вменяемой логике?
Постараюсь объяснить.
Это сайт знакомств. Есть таблица users с анкетными данными пользователей. В этой таблице есть около 50 столбцов, например: "город", "страна", "возраст", "рост" и т.п. Всего 50 шт.
Так же есть 50 таблиц где перечислены все параметры. В таблице "город" все города, в таблице "возраст" все возраста и остальное в том же духе.
Соответственно мне на сайте нужно получить все параметры каждого человека.
Как правильно это сделать? С помощью джойнов?
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344792
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerКак правильно это сделать?Вариантов, на самом деле, множество.
В т.ч. можно и сразу держать подготовленную денормализованную таблицу с нужными данными. Заодно и быстродействие возрастет при запросах на чтение (и без сканирования таблицы).
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344799
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerЕсть таблица users с анкетными данными пользователей. В этой таблице есть около 50 столбцов, например: "город", "страна", "возраст", "рост" и т.п. Всего 50 шт.
Есть физические данные юзера - одна таблица. Место жительства - вторая. Внешние данные - третья. Контакты - четвёртая. Вот это и есть деление по вменяемой логике.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344838
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Akina]polgerВот это и есть деление по вменяемой логике.
Такой вариант не подойдёт, так как все эти таблицы, "город", "возраст" и т.д. заполнены определёнными данными и главная таблица, users, должна содержать лишь идентификаторы для связи. В общем структуру менять однозначно нельзя. Вопрос в том, как с наименьшими временными затратами получить пользователя со всеми подставленными данными. Может я с джойнами что-то не то намудрил, хотя вряд ли, и поэтому сервер сутки думал и так и не окуклился. А может и подзапросы помогут, как советуют выше, правда не представляю как это реализовать... Буду вечером копаться.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344846
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerсервер сутки думал и так и не окуклилсяЛибо не хватает каких-то индексов, либо запрос была написан неправильно. Либо, в крайнем случае, можно явно указать порядок соединения таблиц.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344853
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerТакой вариант не подойдёт, так как все эти таблицы, "город", "возраст" и т.д. заполнены определёнными данными и главная таблица, users, должна содержать лишь идентификаторы для связи.
Так и будет.
polgerобщем структуру менять однозначно нельзя.
Не вижу связи между этими утверждениями.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344885
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Зачем вообще в данном случае нужно разбивать главную таблицу?
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344895
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerЗачем вообще в данном случае нужно разбивать главную таблицу?А затем, что ежели тебе надо посмотреть только сведения о юзере и его контактах, вовсе необязательно будет джойнить таблицы с размером сапог и номером телефона. Чем меньше ненужного дерьма, тем серверу легче.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344898
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, почитай про вертикальный шардинг.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344911
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Если я не ошибаюсь в синтаксисе, пишу с телефона по памяти, то у меня примерно следующее:
SELECT cit.value, cou.value
FROM users u
INNER JOIN table_city cit ON u.city = cit.id
INNER JOIN table_country cou ON u.country = cou.id
... И так 50 раз
Не правильно?
Запросы выполняю в phpmyadmin
В таблице users 20 000 тестовых записей.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344916
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftpolgerсервер сутки думал и так и не окуклилсяЛибо не хватает каких-то индексов, либо запрос была написан неправильно. Либо, в крайнем случае, можно явно указать порядок соединения таблиц.
Может буферного пула на 50 справочников не хватает?
Я бы попробовал подключить пять раз по 10 справочников, с формированием временных таблиц,
а потом сджойнил бы временные таблицы. ИМХО, за сутки бы сработало:)

П.С. Ни количества записей, ни размера памяти, ни типа СУБД...какой вопрос, такой и ответ.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344918
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Так в том то и дело, что мне нужно просмотреть ВСЁ, что касается определенного юзера на одной странице. Все параметры за раз.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344921
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerИ так 50 разСфига бы 50?
Сейчас у тебя одна таблица на 50 полей. А будет - основная таблица полей эдак на 10, и связанные с ней ещё, скажем, 4 таблицы тоже полей по 10 каждая. И ежели тебе нужны только данные из основной и двух дополнительных, то остальные две дополнительные вязать не требуется, и джойнить надо будет не полсотни, а всего 30 словарей. А если из этих таблиц тебе надо ещё и не все поля - то и того меньше.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344928
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerКак будет правильней сделать вывод всей таблицы если она состоит из 50-и столбцов в каждом из которых находятся ключи по которым подключаются таблицы. К одному столбцу подключается одна таблица. Пробовал всё это соеденить джойнами но сервер не переварил такую большую кучу. Как это всё вывести одним запросом с подстановкой данных из подключаемых таблиц?В виртуозу загрузить :P Иногда бывают запросы по 200Kb длиной, выживает. Вообще, если у вас такая братская могила из свойств, то уже можно начинать думать про RDF, и --- раз сайт знакомств --- просто перегнать данные в FOAF и т.п.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344934
polger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П.С. Ни количества записей, ни размера памяти, ни типа СУБД...какой вопрос, такой и ответ.[/quot]
Записей 20 000 шт., память 3 гига,

Сервер баз данных
Сервер: Localhost via UNIX socket
Тип сервера: MySQL
Версия сервера: 5.7.16-0ubuntu0.16.04.1 - (Ubuntu)
Версия протокола: 10
Кодировка сервера: UTF-8 Unicode (utf8)

Веб-сервер
Apache/2.4.18 (Ubuntu)
Версия клиента базы данных: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
PHP расширение: mysqli Документация
Версия PHP: 7.0.8-0ubuntu0.16.04.3

phpMyAdmin
Информация о версии: 4.5.4.1deb2ubu
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344936
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerмне нужно просмотреть ВСЁ, что касается определенного юзера на одной странице. Все параметры за раз.У меня такое впечатление, что ты смотришь для ВСЕХ, а не для одного.
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344938
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, может помочь пред-отбор, т.е. не
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT ...
FROM main
  LEFT JOIN vocab1
  LEFT JOIN vocab2
  ...
  LEFT JOIN vocabN
WHERE main.field = 'value'


а
Код: sql
1.
2.
3.
4.
5.
6.
SELECT ...
FROM (SELECT * FROM main WHERE field = 'value') single
  LEFT JOIN vocab1
  LEFT JOIN vocab2
  ...
  LEFT JOIN vocabN
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39344950
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerSELECT cit.value, cou.value
FROM users u
INNER JOIN table_city cit ON u.city = cit.id
INNER JOIN table_country cou ON u.country = cou.id
... И так 50 раз
Не правильно?
Запросы выполняю в phpmyadmin
В таблице users 20 000 тестовых запи
В таких ситуациях предпочитаю LEFT JOIN, а то можно недосчитаться юзеров.
Проверь индексы, как miksoft советовал.
Попробуй 10 справочников, потом 20 и т.д...
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39345070
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polgerЭто сайт знакомств. Есть таблица users с анкетными данными пользователей. В этой таблице есть около 50 столбцов, например: "город", "страна", "возраст", "рост" и т.п. Всего 50 шт.
Так же есть 50 таблиц где перечислены все параметры. В таблице "город" все города, в таблице "возраст" все возраста и остальное в том же духе.
Соответственно мне на сайте нужно получить все параметры каждого человека.
Как правильно это сделать? С помощью джойнов?
пздц это ахтунг, вариантов несколько:
- вынести весь этот треш и сделать по-нормальному - например возраст и рост указывать как поле int и хранить в основной таблице, а потом переписать в других местах, чтоб не использовать справочники для возраста и роста
- отойти от нормальных форм и в основной таблице закэшить все это дело в длинную строку или json, но придется обновлять на каждый чих в двух местах
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39345106
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77сделать по-нормальному - возраст ... указывать как поле int и хранить в основной таблице

И каждый Новый год под звон курантов запускать UPDATE SET Возраст = Возраст + 1 ?
...
Рейтинг: 0 / 0
Сджойнить 50 таблиц
    #39345135
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,
ну зачем вы придираетесь - хранить год или дату рождения и считать на лету
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сджойнить 50 таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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