Лучший способ получить результаты 15 таблиц одновременно в MySql

У меня около 20 таблиц. Эти таблицы имеют только id (первичный ключ) и описание (varchar). Объем данных достигает 400 строк для одной таблицы.

Прямо сейчас мне нужно получать данные как минимум из 15 таблиц одновременно. Прямо сейчас я звоню им один за другим. Это означает, что за один сеанс я делаю 15 звонков. Это замедляет мой процесс.

Кто-нибудь может предложить какой-нибудь лучший способ получить результаты из базы данных?

я использую MySQL database и используя Java Springs на стороне сервера. Поможет ли мне составление взгляда на все вместе? Приложение становится медленным из-за этой проблемы, и мне нужно решение, которое ускорит мой процесс.

3 ответа

Я не могу получить то, что вам действительно нужно, но здесь объединение всех этих табличных значений в одну таблицу CREATE TABLE table_name AS (

SELECT * 
  FROM table1 t1
  LEFT JOIN table2 t2 ON t1.ID=t2.ID AND
  ...
  LEFT JOIN tableN tN ON tN-1.ID=tN.ID

)

Чтобы получить строку всех описаний в код приложения за одну поездку, отправьте запрос вида

select t1.description, ... t15.description
from  t -- this should contain all needed ids
join table1 t1 on t1.id = t.t1id
...
join table1 t15 on t15.id = t.t15id

Похоже, ваша схема не так хороша. 20 таблиц id/varchar звучат как сломанный EAV, который обычно считается сломанным с самого начала. Точно так же, я думаю, запрос UNION поможет. Это будет "Вид" для создания в базе данных, так что вы можете просто SELECT * FROM thisviewyoumade и пусть беспокоится о том, чтобы ударить по всем столам.

Запрос UNION работает, имея несколько SELECT Заявления "Сложены" друг на друга. Важно, чтобы каждый SELECT Оператор имеет одинаковое число, порядковый номер и типы полей, поэтому при суммировании результатов все совпадает.

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

SELECT 'table1' as tablename, id, col2 FROM table1
UNION ALL
SELECT 'table2', id, col2 FROM table2
UNION ALL
SELECT 'table3', id, col2 FROM table3
... and on and on

Имена или псевдонимы полей в первом SELECT оператором являются имена полей, которые используются в наборе результатов, который возвращается, поэтому не стоит беспокоиться о выполнении кучу AS blahblahblah в последующем SELECT заявления.

Реальный вопрос заключается в том, будет ли этот запрос на объединение выполняться быстрее, чем 15 отдельных вызовов для такого крошечного крошечного количества данных. Я думаю, что лучшим вариантом было бы изменить вашу схему, чтобы этот материал уже хранился в одной таблице, точно так же, как этот вывод запроса UNION. Тогда вам понадобится один оператор выбора для одной таблицы. И 400x20=8000 - все еще изящная маленькая таблица для запроса.

Другие вопросы по тегам