$query = "SELECT *
FROM $database1
WHERE userid!='$userid'
AND mediaid NOT IN (SELECT mediaid
FROM $database2
WHERE uid='$userid')
ORDER BY active ASC LIMIT 80";
这个查询到现在为止一直运作良好。
它突然需要0.5到有时甚至3秒来执行,有时它也会下降到0.1,这是可以接受的。
现在database2
大约有300万行,database1
大约有500,但有时在database1
只有100个项目时速度很慢。我很担心,因为database2
每天新增大约3万行。
mediaid
,userid
,uid
都是索引。
服务器? 8个核心x 3,2,16gb ram。可扩展的云。平均负荷很好。不超过20%cpus
编辑:解释选择返回以下数据:
1 PRIMARY database1 index userid active 4 NULL 80 Using where
2 DEPENDENT SUBQUERY database2 index_subquery uid,mediaid mediaid 130 func 93 Using where
答案 0 :(得分:0)
您可以将查询更改为左连接
select
d1.* from $database1 d1
left join $database2 d2 on d2.mediaid = d1.mediaid
and d2.uid='$userid'
where d1.userid!='$userid'
and d2.mediaid is null
ORDER BY d1.active LIMIT 80
还需要以下索引,将database1
和database2
更改为实名表
alter table `database1` add index ua_idx(userid,active);
alter table `database1` add index mid_idx(mediaid);
alter table `database2` add index u_mid_idx(mediaid,uid);
答案 1 :(得分:0)
最后,我重新编写查询以下载当前用户ID的两个数据。然后在php中计算它。现在它很快。 x10更快。现在好了。