如何从两个表中加速搜索SQL查询?

Sha*_*ane 1 mysql sql

这是一个例子,所以我有桌子user和桌子city,他们是这样的:

user列是(user_id,city_id,timestamp)[user_id和city_id是唯一的]

city列是(city_name,city_id)[city_id是唯一的]

我希望在某个城市的特定日期获得用户数,所以基本上我这样做了:

select city_id, city_name, 
    (select count(user.user_id) 
     from user, city 
     where DATE_FORMAT(user.timestamp, '%Y-%m-%d') = '2017-03-07' 
     and user.city_id = ct.city_id) as user_count
from city ct 
where (city_id = 20 or city_id = 30)
Run Code Online (Sandbox Code Playgroud)

结果:

city_id, city_name, user_count
20       New York   100
30       LA         200
Run Code Online (Sandbox Code Playgroud)

然后我意识到这比直接搜索要慢

select count(user.user_id) 
from user, city 
where DATE_FORMAT(user.timestamp, '%Y-%m-%d') = '2017-03-07' 
    and user.city_id = 20
Run Code Online (Sandbox Code Playgroud)

为什么是这样?ct.city_id原始搜索中是不是已经设置为20或30?我应该如何优化搜索并以我想要的表格格式获得结果?

sca*_*dge 6

您可以改进查询,避免使用subselect并使用内部联接和分组依据

select city_id, city_name,    count(user.user_id) 
from user
inner join city on user.city_id = city.city_id
where DATE_FORMAT(user.timestamp, '%Y-%m-%d') = '2017-03-07' 
and city_id in (city_id = 20 or city_id = 30)
group by city_id, city_name
Run Code Online (Sandbox Code Playgroud)