MySQL: перевод идентификаторов в значения - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть таблица, которая содержит много столбцов с идентификаторами (ключами), соответствующими другим таблицам.например, у меня есть таблица автомобилей, которые были проданы

[table of cars that were sold]
(
  car_make_id
, car_engine_id
, car_model_id
, car_radio_id
, buyer_id
, seller_id
, car_tittle_id
, sale_price
)

, каждое из полей идентификатора имеет другую таблицу, содержащую идентификатор и имя, например:

[another table]
(
  car_make_id
, car_engine_id
, car_model_id
, car_radio_id
, buyer_id
, seller_id
, car_tittle_id
, sale_price
)

[and another table]
(
  car_make
, car_make_id
)

[and another table]
(
  car_title
, car_title_id
)

и т. д.... с каждой таблицей с именем car_lookup, car_model_lookup, ...

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

Я делал такие вещи в Perl, но это может занять несколько часов.поэтому я ищу что-то, что можно сделать в mysql.

ps: автомобильные вещи - это всего лишь пример, я на самом деле не работаю с автомобилями, но это иллюстрирует проблему, с которой я столкнулся.Я также не могу изменить способ настройки базы данных из-за большого количества кода, который уже запрашивает данные.

Спасибо

1 Ответ

0 голосов
/ 15 декабря 2011

Вам необходимо какой-то способ сообщить базе данных, из каких таблиц нужно извлекать имена для каждого идентификатора.

Если этот тип запроса слишком медленный, возможно, вы можете оптимизировать свою базу данных или MySQLсервер, чтобы иметь возможность заполнять эти операторы JOIN быстрее.Попробуйте увеличить размеры кеша (особенно если на вашем сервере много оперативной памяти) и убедитесь, что у вас есть индексирование ключей в этих таблицах поиска.

SELECT car_make, car_engine, car_model, car_radio,
       buyer, seller, car_title, sale_price FROM cars_sold
JOIN car_make_lookup USING (car_make_id)
JOIN car_engine_lookup USING (car_engine_id)
JOIN car_title_lookup USING (car_title_id)
JOIN car_model_lookup USING (car_model_id)
JOIN car_radio_lookup USING (car_radio_id)
JOIN buyer_lookup USING (buyer_id)
JOIN seller_lookup USING (seller_id)
JOIN car_title_lookup USING (car_title_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...