mysql关于in大量数据的解决办法

*** 注意:该办法适用于没办法使用跨库软连接或者中间件的情况

有些经验的都知道,mysql在in大量数据时会出现不走索引的现象,查了很多资料,解决办法主要是将in改为join,但是实际业务中可能会出现从其他库查过来的大量id,例如A库查到老师下面所有的学生id,B库根据学生id去查询统计做题信息等等。

由于同一个请求中会有很多维度数据需要统计,所以我的办法是在最开始创建一个内存临时表,然后后续的所有相关查询把in改成和该临时表的关联查询。

具体代码如下: laravel上执行

 /**
     * 使用临时表关联
     * @param $arr array in的id数组
     */
    public function tempTableQuery($arr)
    {
        DB::select('drop table if exists temp_tb ');
        DB::select('CREATE TEMPORARY TABLE temp_tb(uid int not null default 0)');
        $sql = '';
        foreach ($arr as $v){
            $sql.='('.$v.'),';
        }
        $sql = rtrim($sql,',');
        DB::select(sprintf('insert into temp_tb(uid) values %s',$sql));
        $res = DB::select('SELECT COUNT(*) AS tp_count FROM temp_tb left join `practice_answer` 
        on practice_answer.uid = temp_tb.uid   limit 1');
        echo json_encode($res);

    }
发布了17 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wufantastic/article/details/91350611