php - 从 PHP : Grab entire table first, 添加/替换 SQL 表中的记录或根据需要使用 SELECT?

标签 php mysql performance wordpress

我正在制作一段 PHP 代码,它接受用户 XML 输入(包含多个记录/项目,通常大约 20 到 100 个),对其进行解析,然后根据记录数据库对其进行检查。如果记录不在数据库中,PHP 脚本应该插入它。如果记录在数据库中,脚本应该丢弃用户的输入或运行该记录的更新,具体取决于用户是否选中了“替换记录”复选框。

我的问题是,哪个更快:要选择确定唯一性的整个表的列,然后在 PHP 中对它们进行排序?或者,对于每个 记录,执行 SELECT COUNT() FROM table WHERE name=(input name) AND region=(input region) 并查看是否有任何记录返回?

一个大 SQL 查询 + 相当多的 PHP 排序时间,还是 100 个小 SQL 查询和一个 PHP 比较?

编辑:人们一直在要求详细信息,所以:

数据库大小: 250 条记录或更少
列索引:我还没有在 YET 中放置索引,但我会在生产版本中使用索引设置名称和区域列。
返回的 SELECT 格式: 如果我执行大型 SELECT,由于我使用的 DB 类 (WPDB),它将以行对象的关联数组形式返回。 什么是唯一性:名称和地区列确定记录是否唯一。如果名称-区域组合不在数据库中,则该记录是唯一的。

例如,name:"Paris"region:"France"name:"Paris"region:"Texas" 是两个唯一的记录。但是,name:"Paris"region:"France"name:"Marseilles"region:"France" 也是如此。

最佳答案

使用“REPLACE INTO”更快。语法与“INSERT INTO”完全相同,但如果有任何不唯一的值由于索引(主键或唯一索引)而必须唯一,则现有记录将被替换。无需提前查询,一次查询。

请注意,替换将替换整个记录。如果您只想更新一个字段,然后运行“INSERT INTO ... ON DUPLIACTE KEY UPDATE field=value”,这将插入新记录或更新现有记录。仍然是一个查询。

至于另一部分(如果选中复选框则删除记录)),只需运行“DELETE”,如果记录不存在,它不会被删除 - 同样,一个查询。

这样,您就不会冒在检查和更新之间添加/删除记录的风险,而且您可以保存查询,而且其他人更容易阅读正在发生的事情。

关于php - 从 PHP : Grab entire table first, 添加/替换 SQL 表中的记录或根据需要使用 SELECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660405/

相关文章:

java - 模式搜索性能差

c++ - 使用自动生成的 C 代码的大型 C++ dll 的性能损失

具有 Storyboard 动画的 WPF 用户控件不稳定/不稳定

php - 如果我的 MYSQL 数据库中有特定的 VIN,如何执行操作?

PHP 扩展在 apache 模块中加载,但不在 CLI 中加载

PHP:使用inkscape将eps转换为svg

php - 如何通过提交表单从URL中的数据库中获取id?

php - 如何使用 PHP 在另一个函数中调用此 PDO 函数?

JAVA,检索值时出现SQL异常

mysql - 如何在不添加新列的情况下确定将条目输入到 mysql 表中的时间