代码之家  ›  专栏  ›  技术社区  ›  ssk

在MySQL中选择随机行与其他表联接

  •  1
  • ssk  · 技术社区  · 6 年前

    我正在将数百万行从表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中优化这个查询?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ssk    6 年前

    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;