我有 3 个表country_data, user_data
和topic_data
给定的表结构。
国家数据:
name | code
---------------|---------------
India | IN
United States | US
Australia | AU
用户数据:
user_ip | topic_code | country
---------------|---------------|---------------
192.168.1.1 | topic_code_1 | India
192.168.1.2 | topic_code_2 | United States
192.168.1.3 | topic_code_3 | Australia
主题数据:
name | code
---------------|---------------
topic_1 | topic_code_1
topic_2 | topic_code_2
topic_3 | topic_code_3
我在表中有大约十万(100,000)行user_data
。
我想要的是,我需要使用给定主题的相应国家代码过滤来自每个国家的用户数量。例如,我需要查看topic_2
每个国家/地区的用户数。要求的输出格式是
country_code | count
---------------|---------------
IN | 150
US | 120
AU | 100
现在请检查我的查询:
SELECT cd.code, COUNT(ud.country) as count
FROM topic_data as td, user_data as ud, country_data as cd
WHERE td.name = 'topic_1' AND td.code = ud.topic_code AND ud.country = cd.name
GROUP BY ud.country
这个在 phpmyadmin 中完成执行大约需要 2 秒。在php网页中,即使在服务器中加载页面也需要15秒。通过在查询中删除 group by,即GROUP BY ud.country
,执行需要 30 多秒,输出是最后一个国家代码和所有国家访问的总数。我究竟做错了什么?请帮忙。
- - 更新 - -
使用外键更改表,我的查询也是如此。现在它以闪电般的速度工作。感谢那些帮助过的人。