从数据库加载完整的 ID 列表还是一次执行一条记录?什么最好?

Load a full list of IDs from DB or perform one record at a time ? What's best?

我将一个定制网站迁移到 WordPress,首先我必须从以前的网站迁移数据,然后,每天我都必须使用 API.

我喜欢插入的数据,带有一个唯一的 ID,代表一场足球比赛。

为了避免多次插入同一个游戏,我做了一个数据库table,结构如下:

CREATE TABLE `ss_highlight_ids` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `highlight_id` int(10) unsigned zerofill NOT NULL DEFAULT '0000000000',
    PRIMARY KEY (`id`),
    UNIQUE KEY `highlight_id_UNIQUE` (`highlight_id`),
    KEY `highlight_id_INDEX` (`highlight_id`) COMMENT 'Contains a list with all the highlight IDs. This is used as index, and dissalow the creation of double records.'
) ENGINE=InnoDB AUTO_INCREMENT=2967 DEFAULT CHARSET=latin1

当我尝试在我的 WordPress 数据库中插入一条新记录时,我首先想查找这个 table,看看该 ID 是否已经存在。

现在的问题:)

什么比较好?要使用单个 SQL 查询加载所有 ID,然后使用纯 PHP 检查当前游戏 ID 是否存在,还是查询数据库中我插入的任何一行更好?

我知道 MySQL 查询很耗资源,但从另一方面来说,目前我在这个 table 中有大约 3k 条记录,并且在接下来的几个时间里会超过 30 - 40k年,所以我不知道将所有这些记录加载到 PHP 中是否是一个好习惯?

你有什么意见/建议?

更新#1

我刚刚发现我的 table 有 272KiB 大小和 2966 行。这意味着在附近的功能中,它的大小似乎约为 ~8000KiB+ 大小,并且还在继续。

更新#2

可能我没说的太清楚。对于第一次插入,我必须迭代一个包含大约 12K 条记录的 CSV 文件,每天插入 CSV 文件后,我将插入大约 100 - 200 条记录。所有这些记录都需要在 table 中使用 ID 进行查找。

所以确切的问题是,在 CSV 插入时在 MySQL 中创建 12K 查询然后每天大约 100 - 200 MySQL 查询更好,还是只在服务器中加载 ID内存,并使用 PHP 进行查找 ?

您的 table 有一个列 id,它是 auto_increment,这意味着不需要在该列中插入任何内容。它会自己填满它。

highlight_idUNIQUE,所以也可能是PRIMARY KEY;如果 id.

就摆脱

一个PRIMARY KEY是一个UNIQUE键是一个INDEX。所以这是多余的:

KEY `highlight_id_INDEX` (`highlight_id`)

回到您的问题...SQL 设计 以分批处理。不要通过一次做一行来打败它。

如果 table 只有两列和 2966 行,它怎么可能是 272KiB 大小?如果table中有更多的列;让他们看。关于您在做什么以及如何提高效率,通常会有很好的线索。

2966 行是'trivial';您将不得不仔细查看性能差异。

正在从 CSV 加载...

如果这是替换,请使用加载数据,构建一个新的 table,然后重命名以将其放置到位。一个 CREATE,一个 LOAD,一个 RENAME,一个 DROP。比任何类型的 100 个查询都高效得多。

如果 CSV 是 updates/inserts,加载到临时 table,然后执行 INSERT ... ON DUPLICATE KEY UPDATE ... 执行 updates/inserts 到真正的 table。一次创建,一次加载,一次 IODKU。比任何类型的 100 个查询都高效得多。

如果 CSV 是其他内容,请详细说明。