mysql 多表联查的统计超慢, 50W 条数据的表 和 4K 条数据的表 多表联查 count 很慢 20
A表LEFTJOINB表,普通的select*查询很快但是统计查询selectcount(*)就很慢了..有办法提一下速度吗?selectcount(主键)也还是很慢a表...
A 表 LEFT JOIN B表 ,普通的 select * 查询很快
但是统计查询 select count(*) 就很慢了.. 有办法提一下速度吗?
select count(主键) 也还是很慢
a 表 4k 条数据、b 表 50W 条数据、c 表 400条数据
a - b 一对多
b - c 一对多
SELECT *
FROM a LEFT JOIN b ON (a.b_id = b.b_id) LEFT JOIN c ON (b.c_id = c.c_id) //0.004 秒
SELECT count(*)
FROM a LEFT JOIN b ON (a.b_id = b.b_id) LEFT JOIN c ON (b.c_id = c.c_id) //8秒 展开
但是统计查询 select count(*) 就很慢了.. 有办法提一下速度吗?
select count(主键) 也还是很慢
a 表 4k 条数据、b 表 50W 条数据、c 表 400条数据
a - b 一对多
b - c 一对多
SELECT *
FROM a LEFT JOIN b ON (a.b_id = b.b_id) LEFT JOIN c ON (b.c_id = c.c_id) //0.004 秒
SELECT count(*)
FROM a LEFT JOIN b ON (a.b_id = b.b_id) LEFT JOIN c ON (b.c_id = c.c_id) //8秒 展开
3个回答
展开全部
能具体点吗?快慢很可能只是个人感受,即使给出精确时间还要考虑硬件性能才能确定快慢。
有些查询就是很慢的,你这个50万主表加4K驱动表对于MYSQL来说也算是很经典的了。
至于优化,如果你就是想查count,就根本没必要做关联查询
select count(*) from A where EXISTS (......) 这是两表的
count(主键) count(*) count(0) 速度上你就当没区别就好了,不要迷信某些教条的东西
a b 调换一下位置试试
SELECT count(*) FROM b
LEFT JOIN c ON (b.c_id = c.c_id)
LEFT JOIN a ON (b.b_id = a.b_id)
有些查询就是很慢的,你这个50万主表加4K驱动表对于MYSQL来说也算是很经典的了。
至于优化,如果你就是想查count,就根本没必要做关联查询
select count(*) from A where EXISTS (......) 这是两表的
count(主键) count(*) count(0) 速度上你就当没区别就好了,不要迷信某些教条的东西
a b 调换一下位置试试
SELECT count(*) FROM b
LEFT JOIN c ON (b.c_id = c.c_id)
LEFT JOIN a ON (b.b_id = a.b_id)
展开全部
朋友,我看了1楼同事的回答挺不错的,感觉你确实问题没表达的很清楚,其实快慢有时候是无法避免的,我们只能尽可能的去优化,你试一试吧left join 改成join只求关联表的交集,可以在A联B后去掉左联不匹配的大量数据后 再拿(A联B) join C, 最后的记录条数会少很多,这个时候count(0)可能会能优化一下吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SELECT count(*) from (SELECT *
FROM a LEFT JOIN b ON (a.b_id = b.b_id) LEFT JOIN c ON (b.c_id = c.c_id)) d;
这样写试试,还有 你有加索引吗? 没有的话加下索引会快很多
FROM a LEFT JOIN b ON (a.b_id = b.b_id) LEFT JOIN c ON (b.c_id = c.c_id)) d;
这样写试试,还有 你有加索引吗? 没有的话加下索引会快很多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询