|
|
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
Как будет правильней сделать вывод всей таблицы если она состоит из 50-и столбцов в каждом из которых находятся ключи по которым подключаются таблицы. К одному столбцу подключается одна таблица. Пробовал всё это соеденить джойнами но сервер не переварил такую большую кучу. Как это всё вывести одним запросом с подстановкой данных из подключаемых таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:27 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
Какой смысл это выводить? всё равно глазом не окинешь, на экран не поместишь... Раздели таблицу на несколько поменьше, сгруппировав столбцы в них по вменяемой логике и объединив их 1:1 к базовой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:39 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerПробовал всё это соеденить джойнами но сервер не переварил такую большую кучу.Как именно пробовали? В лимит в 61 джойн не уложились? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:14 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polger, Вариант через подзапросы в секции SELECT тоже пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:21 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
Akina по вменяемой логике Не совсем понял, как это по вменяемой логике? Постараюсь объяснить. Это сайт знакомств. Есть таблица users с анкетными данными пользователей. В этой таблице есть около 50 столбцов, например: "город", "страна", "возраст", "рост" и т.п. Всего 50 шт. Так же есть 50 таблиц где перечислены все параметры. В таблице "город" все города, в таблице "возраст" все возраста и остальное в том же духе. Соответственно мне на сайте нужно получить все параметры каждого человека. Как правильно это сделать? С помощью джойнов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:22 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerКак правильно это сделать?Вариантов, на самом деле, множество. В т.ч. можно и сразу держать подготовленную денормализованную таблицу с нужными данными. Заодно и быстродействие возрастет при запросах на чтение (и без сканирования таблицы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:29 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerЕсть таблица users с анкетными данными пользователей. В этой таблице есть около 50 столбцов, например: "город", "страна", "возраст", "рост" и т.п. Всего 50 шт. Есть физические данные юзера - одна таблица. Место жительства - вторая. Внешние данные - третья. Контакты - четвёртая. Вот это и есть деление по вменяемой логике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:34 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
[quot Akina]polgerВот это и есть деление по вменяемой логике. Такой вариант не подойдёт, так как все эти таблицы, "город", "возраст" и т.д. заполнены определёнными данными и главная таблица, users, должна содержать лишь идентификаторы для связи. В общем структуру менять однозначно нельзя. Вопрос в том, как с наименьшими временными затратами получить пользователя со всеми подставленными данными. Может я с джойнами что-то не то намудрил, хотя вряд ли, и поэтому сервер сутки думал и так и не окуклился. А может и подзапросы помогут, как советуют выше, правда не представляю как это реализовать... Буду вечером копаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:03 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerсервер сутки думал и так и не окуклилсяЛибо не хватает каких-то индексов, либо запрос была написан неправильно. Либо, в крайнем случае, можно явно указать порядок соединения таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:10 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerТакой вариант не подойдёт, так как все эти таблицы, "город", "возраст" и т.д. заполнены определёнными данными и главная таблица, users, должна содержать лишь идентификаторы для связи. Так и будет. polgerобщем структуру менять однозначно нельзя. Не вижу связи между этими утверждениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:16 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
Akina, Зачем вообще в данном случае нужно разбивать главную таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:40 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerЗачем вообще в данном случае нужно разбивать главную таблицу?А затем, что ежели тебе надо посмотреть только сведения о юзере и его контактах, вовсе необязательно будет джойнить таблицы с размером сапог и номером телефона. Чем меньше ненужного дерьма, тем серверу легче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:46 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
В общем, почитай про вертикальный шардинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:49 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
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 тестовых записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:55 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
miksoftpolgerсервер сутки думал и так и не окуклилсяЛибо не хватает каких-то индексов, либо запрос была написан неправильно. Либо, в крайнем случае, можно явно указать порядок соединения таблиц. Может буферного пула на 50 справочников не хватает? Я бы попробовал подключить пять раз по 10 справочников, с формированием временных таблиц, а потом сджойнил бы временные таблицы. ИМХО, за сутки бы сработало:) П.С. Ни количества записей, ни размера памяти, ни типа СУБД...какой вопрос, такой и ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:58 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
Akina, Так в том то и дело, что мне нужно просмотреть ВСЁ, что касается определенного юзера на одной странице. Все параметры за раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:58 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerИ так 50 разСфига бы 50? Сейчас у тебя одна таблица на 50 полей. А будет - основная таблица полей эдак на 10, и связанные с ней ещё, скажем, 4 таблицы тоже полей по 10 каждая. И ежели тебе нужны только данные из основной и двух дополнительных, то остальные две дополнительные вязать не требуется, и джойнить надо будет не полсотни, а всего 30 словарей. А если из этих таблиц тебе надо ещё и не все поля - то и того меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:59 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerКак будет правильней сделать вывод всей таблицы если она состоит из 50-и столбцов в каждом из которых находятся ключи по которым подключаются таблицы. К одному столбцу подключается одна таблица. Пробовал всё это соеденить джойнами но сервер не переварил такую большую кучу. Как это всё вывести одним запросом с подстановкой данных из подключаемых таблиц?В виртуозу загрузить :P Иногда бывают запросы по 200Kb длиной, выживает. Вообще, если у вас такая братская могила из свойств, то уже можно начинать думать про RDF, и --- раз сайт знакомств --- просто перегнать данные в FOAF и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:03 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
П.С. Ни количества записей, ни размера памяти, ни типа СУБД...какой вопрос, такой и ответ.[/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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:07 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerмне нужно просмотреть ВСЁ, что касается определенного юзера на одной странице. Все параметры за раз.У меня такое впечатление, что ты смотришь для ВСЕХ, а не для одного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:07 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
Как вариант, может помочь пред-отбор, т.е. не Код: sql 1. 2. 3. 4. 5. 6. 7. а Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:10 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
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 и т.д... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:14 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
polgerЭто сайт знакомств. Есть таблица users с анкетными данными пользователей. В этой таблице есть около 50 столбцов, например: "город", "страна", "возраст", "рост" и т.п. Всего 50 шт. Так же есть 50 таблиц где перечислены все параметры. В таблице "город" все города, в таблице "возраст" все возраста и остальное в том же духе. Соответственно мне на сайте нужно получить все параметры каждого человека. Как правильно это сделать? С помощью джойнов? пздц это ахтунг, вариантов несколько: - вынести весь этот треш и сделать по-нормальному - например возраст и рост указывать как поле int и хранить в основной таблице, а потом переписать в других местах, чтоб не использовать справочники для возраста и роста - отойти от нормальных форм и в основной таблице закэшить все это дело в длинную строку или json, но придется обновлять на каждый чих в двух местах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 17:15 |
|
||
|
Сджойнить 50 таблиц
|
|||
|---|---|---|---|
|
#18+
17-77сделать по-нормальному - возраст ... указывать как поле int и хранить в основной таблице И каждый Новый год под звон курантов запускать UPDATE SET Возраст = Возраст + 1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 17:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39344936&tid=1831215]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 520ms |

| 0 / 0 |
