mysql - 从一个sql表中选择数据并查看它是否与同一数据库中另一个表上的数据匹配的最有效方法

标签 mysql sql

我有一个包含 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/

相关文章:

c# - 允许用户在 FullCalendar 资源 View 的每个单元格中仅添加一个事件

c# - 从 MySQL 到 MS Access 的 1GB 数据

mysql - 动态数据透视表列 mysql

sql - Postgresql 选择列的不同值的计数

sql - 我需要使用 join fetch,但它会导致 "query specified join fetching, but the owner of the fetched association was not present in the select list"

java - jOOQ - 别名和引号错误

mysql - 条件不起作用的 NULL 值

mysql - 音乐数据库的结构 - 多表还是单表?

mysql - 检索所有子类别 - sql 查询

mysql - 计算联合中的不同列并显示在同一行中