从数据库中随机查询记录,使用JOIN比使用WHERE的效率要好
2011-11-27 13:47
495 查看
现在有这样的业务场景,从一个内容表中随机查询一条数据,并且随机查随出来的记录还不能够是已经使用了的记录,这里有一个专门的表记录了哪些记录是使用了,也就是在做这样的随机查询的时候,还需要关联发送记录保存表,这样才可以确保查询出来的记录是没有被使用过的。
使用的数据库是MYSQL5.5,内容表有2万多条记录,保存发送记录的表只有数10条记录,以下是分别是直接使用where和使用join的测试语句:
直接使用where:
SELECT * FROM `msg` a
WHERE not exists (select 1 from users_send_msg b where b.msg_id=a.id)
and a.id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `msg`)-(SELECT MIN(id) FROM `msg`)) + (SELECT MIN(id) FROM `msg`)))
LIMIT 1;
这条语句我这边执行几十次,时间通常都是在.0.00到0.04秒之间,而下面这条使用join的语句:
select * FROM `msg` AS t1
JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `msg`)-(SELECT MIN(id) FROM `msg`))+(SELECT MIN(id) FROM `msg`)) AS id) AS t2
WHERE not exists (select 1 from users_send_msg b where b.msg_id=t1.id)
and t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
我执行的结果数10次的查询时间,都是显示的是0.00到0.01之间,并且大部份的执行时间都是0.00。那这个应该可以基本说明,join的效果的效果在这里确实要比直接使用where 好。
为什么where的效率要比join差呢,那是因为在SQL最终执行的时候,数据库通常会把where优化为join来执行。
参考:
not in的优化讨论:http://topic.csdn.net/u/20080611/19/db6bb206-2e79-479f-9d5f-e5beb90f37df.html
mysql随机查询若干条数据:http://blog.csdn.net/zxl315/article/details/2435368
SQL Server 中Inner join 和where的效率差异:http://tech.163.com/07/0309/14/395APR410009158J.html
本文出自:冯立彬的博客
使用的数据库是MYSQL5.5,内容表有2万多条记录,保存发送记录的表只有数10条记录,以下是分别是直接使用where和使用join的测试语句:
直接使用where:
SELECT * FROM `msg` a
WHERE not exists (select 1 from users_send_msg b where b.msg_id=a.id)
and a.id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `msg`)-(SELECT MIN(id) FROM `msg`)) + (SELECT MIN(id) FROM `msg`)))
LIMIT 1;
这条语句我这边执行几十次,时间通常都是在.0.00到0.04秒之间,而下面这条使用join的语句:
select * FROM `msg` AS t1
JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `msg`)-(SELECT MIN(id) FROM `msg`))+(SELECT MIN(id) FROM `msg`)) AS id) AS t2
WHERE not exists (select 1 from users_send_msg b where b.msg_id=t1.id)
and t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
我执行的结果数10次的查询时间,都是显示的是0.00到0.01之间,并且大部份的执行时间都是0.00。那这个应该可以基本说明,join的效果的效果在这里确实要比直接使用where 好。
为什么where的效率要比join差呢,那是因为在SQL最终执行的时候,数据库通常会把where优化为join来执行。
参考:
not in的优化讨论:http://topic.csdn.net/u/20080611/19/db6bb206-2e79-479f-9d5f-e5beb90f37df.html
mysql随机查询若干条数据:http://blog.csdn.net/zxl315/article/details/2435368
SQL Server 中Inner join 和where的效率差异:http://tech.163.com/07/0309/14/395APR410009158J.html
本文出自:冯立彬的博客
相关文章推荐
- mysql 使用rand随机查询记录效率测试
- mysql 使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试 【转】
- mysql使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试
- MySQL使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试
- (摘)mysql使用rand随机查询记录效率测试
- mysql使用rand随机查询记录效率测试
- mysql使用rand随机查询记录的高效率方法
- mysql 跨数据库 查询,更新 federated引擎使用记录
- 随机查询数据库中多N条记录
- 从数据库中查询出记录,循环使用
- 数据库随机查询表中的n条记录
- 7、使用WHERE子句查询表中满足条件的记录
- MySQL数据库中如何使用rand随机查询记录
- MySQL数据库如何用rand随机查询记录效率测试