我们有一个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次检索...
貌似每次都会进行20w乘以2w次检索...
解决方案 »
- 求帮助,mysql查询优化
- mysql关闭后不能操作的错误
- mysql的插入为何那么慢?
- 我刚装了mysql 可是在测试MySQL工作是否正常的时候遇到了问题 我知道这不属于这个版块 可是我现在很急啊 这个版块人气又很旺
- Myodbc是否安装正确?
- Mysql会奇怪地自动重新启动?谢谢!
- 如何编程自动备份数据库?
- 帮帮我啊,本是小问题,对我却是大问题(resin3.0语mysql3.23的驱动jdbc怎么连接)
- 按每3个小时的统计
- mysql默认字符集设置错了,已经创建的库 怎么修改为自己想要的字符集?
- 一台有数据一台没有数据,mysql查询数据不出来
- MySQL ,一字段值存的是unicode值,查询出来都是乱码了,求解决方法
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
昨天时间和今天时间之间可能有一些device_uuid在之前出现过
你的语句只能获取今天的独立用户 但不能获取新增用户啊
show index from session;
show index from device;
索引情况如何,在inputtime、DEVICE_UUID上建立复合索引
在deviceid上建立索引