gpt4 book ai didi

php - 比较 Mysql 中的行以查看其他表中不存在哪些值的最快方法

转载 作者:行者123 更新时间:2023-11-30 23:25:51 26 4
gpt4 key购买 nike

我有两个表,一个有 300 万行,另一个有 200,000 行,我想检查较小表的特定行中的所有值是否存在于较大表中,如果不存在,那么我想标记它们以便我可以识别它们并对其进行一些处理。

到目前为止已经尝试过了,

1) SELECT EXISTS(SELECT 1 FROM table_bigger WHERE some_condition in table_smaller);

2) $something = SELECT somthing FROM 'table_smaller'

然后在 PHP 中使用“select count(*) from bigger_table where something="$something"; 检查大表中是否存在 $something

这两种方法至少需要 1 天才能完成,我需要像这样比较表格,这使得我等待得到结果并重新开始工作,我想知道这样比较的最佳方式和最快方式是什么。

感谢任何帮助。

最佳答案

您可以直接比较表,但这样做会导致对两个表进行全表扫描。确保您在要比较的特定列上有索引,以最大程度地减少扫描表所花费的时间。

下面的查询将包含不存在的行。 (也许将其缓存在 Redis 中?)在 PHP 中进行必要的处理,然后根据结果构造您需要的查询/过程。

从 table_large 中检索值与 table_small 不匹配的行

SELECT field_large FROM table_large WHERE field_large NOT IN (SELECT field_small FROM table_small)

结果值为 2 和 3。

上述示例的示例表结构

CREATE TABLE IF NOT EXISTS `table_large` (
`field_large` int(1) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`field_large`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `table_small` (
`field_small` int(1) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`field_small`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

INSERT INTO `table_large` (`field_large`) VALUES (1), (2), (3);
INSERT INTO `table_small` (`field_small`) VALUES (1);

关于php - 比较 Mysql 中的行以查看其他表中不存在哪些值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com