mysql - 如果存在于 SQL/MySQL 上,哪一个在检查和跳过插入上更快

标签 mysql sql

我看过很多关于这一篇的文章。我想和你联系。 我的问题是: 一张表:ID(INT, Unique, Auto Increase) , Title(varchar), Content(text), Keywords(varchar)

我的 PHP 代码将始终插入新记录,但不接受基于标题或关键字的重复记录。因此,标题或关键字不能是主字段。我的 PHP 代码需要检查现有记录并同时插入 10-20 条记录。

所以,我这样检查:

SELECT * FROM TABLE WHERE TITLE=XXX   

如果什么都不返回,那么我就执行 INSERT。 我读了一些其他的帖子。有人说:

INSERT IGNORE INTO Table values()

另一个人建议:

SELECT COUNT(ID) FROM TABLE

如果它返回 0,则执行 INSERT

我不知道这些查询中哪个更快。

我还有 1 个问题,这些查询有什么不同和更快:

SELECT COUNT(ID) FROM ..
SELECT COUNT(0) FROM ...
SELECT COUNT(1) FROM ...
SELECT COUNT(*) FROM ...

它们都显示了表中的记录总数,但我不知道 mySQL 认为数字 0 还是 1 是我的 ID 字段?即使我执行 SELECT COUNT(1000) ,我仍然得到我的表的总记录,而我的表只有 4 列。

我正在使用 MySQL Workbench,是否可以选择此应用程序的测试速度?

最佳答案

我会使用 insert on duplicate key update命令。文档中的一条重要评论指出:“...如果表上有一个多列唯一索引,则更新使用(似乎使用)更新查询中的(唯一索引的)所有列。”

因此,如果示例中的表有 UNIQUE(Title,Keywords) 约束,那么,您将使用:

INSERT INTO table (Title,Content,Keywords) VALUES ('blah_title','blah_content','blah_keywords')
  ON DUPLICATE KEY UPDATE Content='blah_content';

它应该可以工作,而且是对数据库的一次查询。

关于mysql - 如果存在于 SQL/MySQL 上,哪一个在检查和跳过插入上更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981011/

相关文章:

php - 在 Laravel 网络应用程序中运行网络抓取 cronjob 以将数据保存到数据库的理想方式

解析 XML 字段并检索值的 SQL 查询

java - Spring Data JPA Select Distinct

sql - 在 Postgresql 中更改列时发出问题

SQL - JOIN BETWEEN 与 WHERE BETWEEN

php - 为什么我的 MySQL 数据列中只保存了 64kB 的数据?

php - 从 mysql 中选择并用复选框格式化它们并设置选中的 ="checked"属性

mysql - 获取库存余额

java - 如何在不使用实体类的情况下使用 EclipseLink 与表进行交互?

java - JDBC 无法加载数据源的工厂类