我有一个包含 2 个表的数据库,两个表都有大约 200,000 条记录。
我们将这些表称为 TableA 和 TableB
目前我有一个触发选择查询的函数,该查询会抓取 TableA 中符合条件的所有记录。获得该数据后,我有一个 foreach 循环,它使用 TableA 中的数据来查看它是否与 TableB 中的任何记录匹配。
问题在于,由于记录太多,因此需要一段时间才能完成此操作。我知道我这样做的方式是有效的,因为它做了它应该做的事情,但需要 3 分钟才能完成脚本。有没有更快更有效的方法来做这样的事情?
预先感谢您的帮助。
PS:我使用的是 PHP。
最佳答案
实现您想要的目标的最有效方法是:
<强>1。为每个表创建一个主键列(如果您还没有)。示例架构,其中列“id”是表行的唯一标识符:
TableA id firstname lastname 1 Michael Douglas 2 Michael Jackson
TableB id table_a_id pet 1 1 cat 2 2 ape 3 1 dog
Google or search here on stackoverflow on how to create or add a primary key for a mysql table column. An example of creating TableA with a primary key:
CREATE TABLE `TableA` (
`id` int(11) unsigned AUTO_INCREMENT,
`firstname` varchar(100),
`lastname` varchar(100),
PRIMARY KEY (`id`)
)
<强>2。创建一个 SQL 查询来获取您需要的内容。例如:
要获取两个表中至少有一个匹配项的所有行:
SELECT TableA.id, TableA.firstname, TableA.lastname, TableB.pet
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.table_a_id;
要从 TableA 中获取所有行,并仅从 TableB 中获取匹配的行:
SELECT TableA.id, TableA.firstname, TableA.lastname, TableB.pet
FROM TableA
LEFT JOIN TableB
ON TableA.id=TableB.table_a_id;
关于mysql - 从一个sql表中选择数据并查看它是否与同一数据库中另一个表上的数据匹配的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31194726/