什么是以下最干净的方式(MySQL)
问题描述:
我有一个包含大约3,000,000行的巨大城市表。我需要创建一个包含以下行的新列:什么是以下最干净的方式(MySQL)
'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
现在第二方式是快得多,但是更清洁?以上只会执行一次,所以问题只是出于好奇。如果有更好的方法来实现这一点,请分享!
预先感谢您。
答
如果我做这样的事情,我宁愿用在需要时添加列的视图去(这样就避免了在磁盘上的表中存储的冗余数据带来的额外开销)
任何理由你反常规这样的数据? –