我正在将数百万行从表1迁移到表2。迁移之后,我试图对某些行进行检查以查看它们是否被正确迁移。这是一个示例SQL查询[不是确切的查询]:
SELECT tbl1.name,
tbl1.address,
tbl2.name,
tbl2.new_address
FROM
(SELECT *
FROM table1
ORDER BY RAND() limit 10) tbl1
INNER JOIN table2 tbl2
ON tbl1.name = tbl2.name;
我正在尝试从表1中选择10行与表2一起进行检查。如果运行带有解释的查询,它将进行全表扫描,即表1中的所有行(> 1.3亿)。如何在MySQL中优化此查询?
答案 0 :(得分:1)
基于http://bigdatums.net/2017/01/05/select-random-sample-records-mysql/的建议
SELECT tbl1.name,
tbl1.address,
tbl2.name,
tbl2.new_address
FROM
(SELECT *
FROM table1
WHERE RAND() < 0.2 LIMIT 10) tbl1
INNER JOIN table2 tbl2
ON tbl1.name = tbl2.name;
似乎足以满足我的情况,即RAND()<0.2 LIMIT 10。