对我的一些查询测试运行EXPLAIN导致连接速度慢,即使是索引也是如此 如何使用以下信息更有效地进行MYSQL查询?
表
计数器: id(pk),timestamp,user_id(fk)
用户: ID(PK),用户名,website_id(fk)
网站: id(pk),网站名称
SELECT t2.username, t3.sitename, count(*) as views FROM counter t1
LEFT JOIN user t2 ON t2.id = t1.user_id
LEFT JOIN website t3 ON t3.id = t2.website_id
WHERE t1.id <> ""
GROUP BY t1.id
ORDER BY t1.id DESC
html表中的结果:
用户名,网站名称,counter_views
答案 0 :(得分:2)
不要count(*)
,而是使用count(t1.id)
问题编辑更改
通过编辑问题,您应该在count语句中添加一个列名,例如, count(user.id)
我相信sql是错误的。你不想要这个:
select u.username, s.sitename, count(c.id)
from user u
join website s on u.website_id = s.id
join counter c on u.id = c.user_id
where u.id <> ""
group by u.username, s.sitename
order by u.id desc
答案 1 :(得分:1)
您的数据是否已填充?如果这些表为空或非常小,优化器可能会选择“全部”查询,因为整个表位于一个页面上。从磁盘加载一页以获取整个表比在磁盘上为索引命中页面更快,然后是真实数据页的另一页。
答案 2 :(得分:0)
您的查询看起来不对。我会用这样的东西:
SELECT u.username, w.sitename, c.views
FROM (
SELECT user_id, COUNT(*) AS views FROM counter GROUP BY user_id
) AS c
LEFT JOIN user u ON u.id = c.user_id
LEFT JOIN website w ON w.id = u.website_id
ORDER BY c.views DESC
我也会为counter.user_id添加索引。