sql - 如何使大表上的自联接更有效?
问题描述
我目前正在尝试查找在过去 6 个月内创建的潜在重复客户,这些客户与相对较大(760,000 多行)表中的所有历史客户相匹配。在我的情况下,将 2 个客户分类为相似的是姓名、不同客户 ID 和类似 DOB 上的DIFFERENCE值为 4(客户 1 DOB = 客户 2 DOB,或客户 1 DOB 为空,或客户2 DOB 为空)。我目前正在尝试通过像这样自加入表格来实现这一点:
SELECT *
FROM (SELECT * FROM Customer c WHERE c.Created >= DATEADD(MONTH, -6, GETUTCDATE())) c1
JOIN (SELECT * FROM Customer) c2 ON c1.CustomerID <> c2.CustomerID
WHERE (c1.DOB IS NULL OR c2.DOB IS NULL OR c1.DOB = c2.DOB)
AND DIFFERENCE(c1.FirstName, c2.FirstName) = 4
AND DIFFERENCE(c1.LastName, c2.LastName) = 4
当我删除 DOB 条件时,查询运行良好(大约 2 或 3 秒执行);但是,一旦我重新添加该条件,查询就会一直旋转,直到我的机器内存不足。当不包括 DOB 空值检查(即仅部分)时,该查询也可以正常工作(尽管有点慢c1.DOB = c2.DOB
)。任何关于如何重构/优化此查询的建议将不胜感激!
解决方案
推荐阅读
- python - 在字符串python中使用带有“{”的string.format
- screensharing - 当两个用户同时看到相同的任务时通知用户
- javascript - 这个棘手的 js 赋值是如何工作的?
- php - 显示正确的不完整注册数,而不是静态值 1
- javascript - css动画完成后运行js脚本
- python - django:如何查看电子邮件和用户名始终以小写或唯一存储,即使不是小写
- ios - 发送最新版本的 Itunesconnect 进行审核
- prometheus - prometheus 使用远程写入器时设备上没有剩余空间
- entity-framework - asp.net 核心数据库脚手架
- java - Not able to start jenkins localhost:8080