从mysql查出200万数据有什么好的办法

查询的时候老是崩溃

鸿蒙传说
浏览 1452回答 12
12回答

肥皂起泡泡

不要用分页,查到后面越查越慢。因为 limit 10000,100 这种那个10000是会查询然后丢弃的。正确的做法是用游标。假设你的游标字段为id $cursor = 0; $size = 1000; do { $sql = 'SELECT * FROM user WHERE id > :id ORDER BY id DESC limit :size'; $data = 执行查询得到的数组。 $count = count($data); foreach($data as $row){ $id = $row['id']; //处理数据 } // 当前条数不大于size,证明下面没数据了。 if($count<$size){ break; } }while(true); 这种是利用mysql查询筛选【一部分你要的数据,不存在数据丢弃】。所以速度一直都很快

慕运维8079593

没有碰到这种问题都是一律的解决方案: 分页,limit。 一看就是没撞到过墙。 用pdo链接上数据库之后,设置这个参数,非常隐晦的一个参数,一般人不知道$PDOObject->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 然后上亿的数据行也是随便取,每条的返回速度都一致。

偶然的你

你是想查出来计算呢,还是查出来展示呢,这么多数据要分块查询的。

慕沐林林

楼上说的都不准确,你要是分页查,查到后面,能让你抓狂,你信不信,每次查询都要好久有一个好的办法 select id from A where XXXXXXX limit xxx offset xxx;select * from A where id in (上一步查询id); 这样会比较好些,速度基本不会有问题, 可以试一下这种办法

猛跑小猪

分页啊,直接查200万数据放内存肯定崩溃。

拉风的咖菲猫

分页 分块查询数据比较好,一次性查200w的数据,内存吃不消。

牧羊人nacy

肯定要分页啊,不然得多大的内存才吃得消

杨__羊羊

循环分页查询 操作完以后记得unset掉结果集 不然长期占用大量内存会有很大问题.

MYYA

SELECT Title FROM Information INNER JOIN ( SELECT ID FROM Information where IsDeleted =0 ORDER BY `CreateTime` LIMIT 1000,20 ) AS x USING(`id`); SELECT Title FROM Information where IsDeleted =0 ORDER BY `CreateTime` LIMIT 1000,20 上面的写法比下面快 30%

慕慕森

可以用yeid每次查一百条数据
打开App,查看更多内容
随时随地看视频慕课网APP