我们正在研究大约1300万行的表格。我们的目标是只在一个餐厅(〜约300,000行)中查找此表中的重复项。我们的重复标准是姓氏相同,名字相同的前两个字母,以及相同的电话或电子邮件。这些都是他们自己的专栏。我们现在的策略是为餐厅的所有行创建两个相同的临时表,然后按照上述条件加入它们,然后从第一个表中返回id,名,姓,电话和电子邮件。优化SQL重复搜索
SELECT
DISTINCT t1.id, t1.firstname, t1.lastname, t1.phone, t1.email
FROM
(
SELECT lmoc.id, lmoc.firstname, lmoc.lastname, lmoc.phone, lmoc.email
FROM loyalty_member_opentable_customer lmoc
WHERE lmoc.opentable_restaurant_id=2296
AND lmoc.lastname NOT LIKE '%Tour%'
) AS t1
INNER JOIN
(
SELECT lmoc2.id, lmoc2.firstname, lmoc2.lastname, lmoc2.phone, lmoc2.email
FROM loyalty_member_opentable_customer lmoc2
WHERE lmoc2.opentable_restaurant_id=2296
AND lmoc2.lastname NOT LIKE '%Tour%'
) AS t2
ON STRCMP(t1.lastname,t2.lastname)=0
AND t1.id!=t2.id
AND STRCMP(LEFT(t1.firstname,2),LEFT(t2.firstname,2))=0
AND (STRCMP(t1.phone,t2.phone)=0 OR STRCMP(t1.email,t2.email)=0)
ORDER BY t1.lastname, t1.firstname
问题是这个查询需要48小时的北方运行。任何人都可以想到一个更有效的方法来运行它?我们需要所有重复项目,以便餐厅能够按照他们认为合适的方式合并它们。
听起来像是一个很好的策略。玩的开心。 – Strawberry
这个问题似乎是无关紧要的,因为没有问题。 – Strawberry
如果您发布表结构和SQL查询,这会很有用。此外,有关当前性能的一些信息将有助于衡量可以改进的地方。尝试将其重新翻译为一个问题。 –