Какой самый чистый способ из следующих (MySQL) - PullRequest
1 голос
/ 02 ноября 2011

У меня есть огромная таблица городов, содержащая около 3 000 000 строк.Мне нужно было создать новый столбец, который содержит следующую строку:

'City name, City name with accent, Country name'

Базовая схема выглядит следующим образом:

city_id         int 
name            varchar
status          varchar
date_created    int(11)
country_id      int
accent_name     varchar
city_country    text

И есть таблица стран, которая содержит contry_id и его имя.

Теперь я нашел 2 способа заполнения столбца city_country.

Попытка 1:

delimiter //
CREATE FUNCTION getConcat(x INT(11))
    RETURNS TEXT
    READS SQL DATA
BEGIN
    DECLARE var1 TEXT;
    SELECT concat(CT.name, ', ', CT.accent_name, ', ', CR.name) AS Combined INTO var1 FROM `wp_City` AS CT LEFT JOIN `wp_Country` AS CR ON CR.country_id = CT.country_id WHERE CT.city_id = x;
    RETURN var1;
END//
UPDATE `wp_City` SET `city_country`=(SELECT getConcat(city_id)) WHERE 1;

Попытка 2:

Я создал новую таблицу, содержащую всего один столбец:

INSERT INTO `_myCity` (name, status, date_created, country_id, accent_name, lat, `long`, region, city_country)
    SELECT c.name, c.status, c.date_created, c.country_id, c.accent_name, c.lat, c.long, c.region, _c.name
    FROM `wp_City` as c inner join `wp_Country` _c on c.country_id = _c.country_id

Теперь второй способ намного быстрее, но который чище?Вышеуказанное будет выполнено только один раз, поэтому вопрос просто из любопытства.Если есть лучшие способы достижения этого, пожалуйста, поделитесь !!

Заранее спасибо.

1 Ответ

2 голосов
/ 02 ноября 2011

Если бы я сделал что-то подобное, я бы предпочел перейти к представлению, которое добавляет столбец при необходимости (таким образом, избегая дополнительных издержек, связанных с хранением избыточных данных в таблице на диске)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...