mysql关于in大量数据的解决办法 | 您所在的位置:网站首页 › 数据库查询大量数据怎么办 › 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); }
|
CopyRight 2018-2019 实验室设备网 版权所有 |