- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想比较两个具有相同列的巨大表,以查找具有不同值的记录。 (两个表中的许多行是相同的)
需要大量的时间,性能很差,查询现在是这样的:
SELECT *
FROM table1 a
INNER JOIN table2 b
ON a.value!=b.value
OR a.value!=b.value
OR a.value!=b.value
OR a.value!=b.value
OR a.value!=b.value
OR a.value!=b.value
OR a.value!=b.value OR...
WHERE a.id=1
AND b.id=2
AND a.specialvalue=b.specialvalue;
我的想法是为我需要比较的所有值创建一个校验和,并且只比较行的校验和。我的问题是:这是一个好方法吗?会有性能提升吗?是否有可能在合理的时间内比较两行,每行都有大约 10 万条记录?
最佳答案
如果您需要将 100K 行中的每一行与 100K 行中的其他行进行比较,则大约需要进行 50亿 次比较。这将花费比你喜欢的更长的时间。但是你可以这样做:
CREATE Cksums (
md5 CHAR(32) CHARACTER SET ascii,
id ..., -- PK of the row
INDEX(md5)
);
INSERT INTO Cksums (md5, id)
SELECT
MD5(CONCAT_WS("\t", col2, col3, ...),
id
FROM your_table;
然后查找重复的行:
SELECT md5,
GROUP_CONCAT(id) AS dup_ids
FROM Cksums
GROUP BY md5
HAVING COUNT(*) > 1;
DROP TABLE Cksums; -- cleanup
这将通过两次 100K 表扫描(一次用于构建 Cksums,一次用于检查它)有效地进行 500 亿次比较。
注意事项:
NULL
。BLOB
应通过 HEX(the_blob)
提取,以避免 CONCAT_WS
中的各种问题。GROUP_CONCAT
将截断列表。关于mysql - 使用校验和比较多列上的两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41876372/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!