Лучший способ получить результаты 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 - все еще изящная маленькая таблица для запроса.