我们有一个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次检索...
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上建立索引