【发布时间】:2011-04-30 12:47:12
【问题描述】:
首先,我只想说我正在使用 PHP 框架 Yii,所以如果可能的话,我想留在它定义的 SQL 语句集中。我知道我可能会创建一个很长的 SQL 语句来完成所有工作,但我宁愿不去那里。
好的,假设我有一个表格用户和一个表格 FavColors。然后我有一个表单,用户可以通过从大量可能的颜色中选中一个或多个复选框来选择他们的颜色偏好。
这些结果在 FavColors 表中存储为多行,如下所示(id、user_id、color_id)。
现在想象用户进入并改变他们的颜色偏好。在这种情况下,将新的颜色偏好输入数据库的最有效方法是什么?
选项 1:
- 批量删除 user_id 匹配的所有行
- 然后批量插入所有新行
选项 2:
- 浏览当前的每一行以查看发生了什么变化,并进行相应的更新
- 如果需要插入更多行,请执行此操作。
- 如果需要删除行,请执行此操作。
我喜欢选项一,因为它只需要两个语句,但是删除一行只是为了可能放回几乎完全相同的数据而感觉有些不对劲。还有一个问题是让 ids 自动递增到更高的值很快,我不知道是否应该尽可能避免这种情况。
选项 2 将需要更多的编程工作,但会防止我删除一行只是为了再次创建它的情况。但是,在 PHP 中增加更多负载可能不值得为 MySQL 减少负载。
有什么想法吗?大家会怎么做?
【问题讨论】:
标签: php mysql performance yii