现在我有以下表项
...etc
我想要创建一个类别表和items_categories映射表,这样我就可以开始在它自己的表中跟踪类别。
问题是大项目表需要一段时间。
现在,我确实在items表上选择了不同的类别。这将是缓慢的,真的没有办法绕过它。
将项目中的类别字段迁移到具有类别表和类别项表的最快方法是什么?这必须在所有Sql中完成(没有外部脚本)。
发布于 2015-05-11 22:16:37
警告:这是未经测试的代码。
CREATE TABLE Categories (
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
category VARCHAR(...) NOT NULL,
PRIMARY KEY(id),
INDEX(category)
) ENGINE = InnoDB;
-- Create mapping table
CREATE TABLE Categories_Items (
category_id SMALLINT UNSIGNED NOT NULL,
item_id ...,
PRIMARY KEY(category_id, item_id),
INDEX(item_id, category_id)
) ENGINE = InnoDB;
-- Populate Categories table and generate ids
INSERT INTO Categories (category)
SELECT DISTINCT category FROM items;
-- Start to convert Items.category to Items.category_id
ALTER TABLE Items
ADD COLUMN category_id SMALLINT UNSIGNED NOT NULL;
-- Populate mapping table
INSERT INTO Categories_Items
(category_id, item_id)
SELECT c.id, i.id
FROM Categories AS c
JOIN Items AS i ON i.category = c.category;
-- Finish conversion
ALTER TABLE Items
DROP COLUMN category;https://dba.stackexchange.com/questions/101226
复制相似问题