【问题标题】:Fastest way to insert data to database for one to many relationship为一对多关系将数据插入数据库的最快方法
【发布时间】:2014-11-26 16:29:19
【问题描述】:

我正在寻找一种将数据插入数据库的最快方法。

目前我有 2 个表,分别是“User”和“User_Detail”。 一个“用户”可以有多个“用户详细信息” 示例:

在数据库中,我们有用户“John”的年龄和邮件记录。

用户表

|Name     |
|---------|
| John    | 
| Jason   |  
| Wilson  | 

User_Detail 表

| Usr_Name| Property | Value  |
|---------+----------+--------|
| John    | Age      | 12     |
| John    | mail     | gmail  |
| Wilson  | Age      | 31     |

我想编写一个查询以将“uni”添加到所有用户。 结果会变成这样。

User_Detail 表

| Usr_Name | Property | Value  |
|----------+----------+--------|
| John     | Age      | 12     |
| John     | mail     | gmail  |
| John     | Uni      | 00000  |
| Wilson   | Age      | 31     |
| Wilson   | Uni      | 00000  |
| Jason    | Uni      | 00000  |

关于如何插入数据有什么建议或想法吗? 我需要最快的方法来做到这一点,因为我的 USER 表中有大约 10k 个用户。 可以是任何语言,也可以是数据库查询,只要能非常快地将记录插入数据库即可。

【问题讨论】:

  • 您从 User_Detail 表中获取的值是什么?
  • 告诉我们一些方法,我们会告诉你哪种方法最快
  • 有多少属性?它们会动态变化吗?如果它们不是太多且稳定,请考虑使用规范化模式而不是 EAV 存储。

标签: mysql database postgresql insert one-to-many


【解决方案1】:

首先,考虑规范化您的架构。这是in-depth discussion of EAV storage on dba.SE。

根据您给定的设计,这可以完成工作:

INSERT INTO "User_Detail" ("Usr_Name", "Property", "Value")
SELECT "Name", 'Uni', '0000'
FROM   "User";

在 Postgres 中,我也会建议 not to use mixed-case identifiers。

【讨论】:

  • 您好欧文,感谢您的帮助。它在我的数据库上运行良好。 :)
【解决方案2】:

要插入一个值,只需执行一个简单的插入查询。

INSERT INTO `User_detail` (`User_name`, 'Property`, `Value')
SELECT `Name`, 'H/P', 50012 FROM `Users`

要使插入的值有所不同,您需要将硬编码值 50012 更改为可以解析为您想要的数字的值。

【讨论】:

  • 嗨 LeeG,实际上“uni”的值是硬编码的。对于所有用户来说,这将是相同的值
  • 嗨 LeeG,我对查询不是很了解。如果使用上面的查询“从用户中选择名称”,它将始终是同一个用户,对吧?
  • 这是非标准的 MySQL 语法,并且不正确(检查你的反引号)。
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
相关资源
最近更新 更多