php - 如何快速实现mysql范围查询?
天蓬老师
天蓬老师 2017-04-10 14:39:37
[PHP讨论组]

我有一堆的id,高达几百上千个id,每个id在数据库中都有唯一对应的数据,我想快速查询出来这个结果集,但以我的知识只知道sql语句用 in(ids) 来查询,这种查询有500个id和有5000个id的效率差别是不是特别大啊?有没有其他方式能高效点?

情境:更新一张excel表格,里面有N条数据,是根据数据库里的数据来更新的。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
PHPz

我能想到的也就是两个方法, 1). 像你说的, in(ids); 2). 建临时表, 把id插进去, 然后做join.
就是这个网页里提到的:
http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/
一般来说, 第二种好一些.

就我的理解来说,
第一种in list的方式, mysql会把你传入的id列表排序(排序后在内存中), 然后遍历 数据表, 用每一条记录去 二分查找你的 排序后的id列表; 这种工作方式是不会过索引的.
第二种, 临时表和 数据表做join, 数据表在ID字段上的索引是会被使用的.

附一点临时表使用:

mysql> create temporary table if not exists $TMP (id int);
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> insert into $TMP values(1),(2),(3),(4),(5);
Query OK, 5 rows affected (0.05 sec)
Records: 5  Duplicates: 0  Warnings: 0

断开连接后临时表被自动drop掉.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号