mysql 中使用not in 后为啥更慢了...

flmh1314 2010-11-25 11:59:00
我们有一个session表,用来存储每天使用我们程序的计算机设备情况,有两个字段inputtime,device_uuid,分别用来存储时间和计算机的设备id(全球唯一),这个表中目前有20w条数据,inputtime字段做了索引.以前计算每天新增的计算机用户是这样计算的 SELECT count(DISTINCT device_uuid) FROM session WHERE inputtime <='今天时间'; SELECT count(DISTINCT device_uuid) FROM `mobile_session` WHERE inputtime <='昨天时间'; 用今天的减去昨天的,就可以得到每天的新增用户了.后来感觉这样做,每次都要进行两次全表搜索,效率不高,我们就新建了一张device表,目前有20000条数据,有一个字段deviceid,用来存储所有昨天之前使用过我们的程序的计算机设备id,然后今天新增的用户可以这样计算 SELECT count(DISTINCT device_uuid) from session where inputtime>='昨天' and inputtime <='今天' AND DEVICE_UUID NOT IN (SELECT deviceid FROM device ); 发现速度非常慢...请问如何优化呢?
貌似每次都会进行20w乘以2w次检索...
...全文
340 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flmh1314 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]

换成JOIN,不用IN来试试。

SELECT count(DISTINCT device_uuid)
from session a left join (SELECT deviceid FROM device ) b on a.DEVICE_UUID=b.deviceid
where inputtime>='昨天' and inputtime <='今天'
AND b.devic……
[/Quote]
用了你的语句 耗时40秒
而我用之前的两个语句都是0.5秒 加起来才1秒
flmh1314 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zuoxingyu 的回复:]

SELECT count(DISTINCT device_uuid) FROM session WHERE inputtime between '昨天时间'; and <='今天时间';

这样不就一次就全部查出了么??
[/Quote]

昨天时间和今天时间之间可能有一些device_uuid在之前出现过
你的语句只能获取今天的独立用户 但不能获取新增用户啊
ACMAIN_CHM 2010-11-25
  • 打赏
  • 举报
回复
换成JOIN,不用IN来试试。

SELECT count(DISTINCT device_uuid)
from session a left join (SELECT deviceid FROM device ) b on a.DEVICE_UUID=b.deviceid
where inputtime>='昨天' and inputtime <='今天'
AND b.deviceid is null
zuoxingyu 2010-11-25
  • 打赏
  • 举报
回复
SELECT count(DISTINCT device_uuid) FROM session WHERE inputtime between '昨天时间'; and <='今天时间';

这样不就一次就全部查出了么??
wwwwb 2010-11-25
  • 打赏
  • 举报
回复
SELECT count(DISTINCT device_uuid) from session where inputtime>='昨天' and inputtime <='今天' AND DEVICE_UUID NOT IN (SELECT deviceid FROM device );
索引情况如何,在inputtime、DEVICE_UUID上建立复合索引
在deviceid上建立索引
ACMAIN_CHM 2010-11-25
  • 打赏
  • 举报
回复
那就换成这个试试。

另外贴出你的
show index from session;
show index from device;

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧