在mysql中选择随机行与另一个表连接

4zcjmb1e  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(285)

我正在将数百万行从表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连接以进行检查。如果我用explain运行这个查询,它将执行一个完整的表扫描,即表1中的所有行(大于1.3亿)。如何在mysql中优化这个查询?

hkmswyz6

hkmswyz61#

基于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。

相关问题