我使用了这个查询
SELECT COUNT(CASE WHEN C <= 1 THEN 1 END) AS nooffamiliesHavingcount1,
COUNT(CASE WHEN C BETWEEN 2 AND 4 THEN 1 END) AS nooffamiliesHavingcountbetween2And4,
COUNT(CASE WHEN C > 4 THEN 1 END) AS nooffamiliesHavingcountgreaterthan3
FROM ( SELECT COUNT(*) AS C
FROM user where user_id = (select user_id from location where location_id in(select location_id from country where state_name='STATE'))
GROUP BY House_No
) t
此处子查询返回大约10000条记录。用户 表有10,00,000条记录。这花了太多时间。然后 它说错误是服务器消失了。我正在使用mysql。
我是从谷歌搜索的。但对我来说没有运气。
我需要对我的表进行哪些更改。如何成功执行此查询 提高查询性能。请建议我。提前谢谢......
答案 0 :(得分:2)
尝试此查询
SELECT
COUNT(CASE WHEN C <= 1 THEN 1 END) AS nooffamiliesHavingcount1,
COUNT(CASE WHEN C BETWEEN 2 AND 4 THEN 1 END) AS nooffamiliesHavingcountbetween2And4,
COUNT(CASE WHEN C > 4 THEN 1 END) AS nooffamiliesHavingcountgreaterthan3
FROM
(SELECT
COUNT(*) AS C
FROM
user u,
location l,
country c
where
l.state_name='STATE' AND
l.some_other_column_id= 4 AND <------- Add your condition
c.location_id = l.location_id AND
u.user_id = l.user_id
GROUP BY
u.House_No) t
使用正确的连接,因为它很容易理解..
SELECT
COUNT(CASE WHEN C <= 1 THEN 1 END) AS nooffamiliesHavingcount1,
COUNT(CASE WHEN C BETWEEN 2 AND 4 THEN 1 END) AS nooffamiliesHavingcountbetween2And4,
COUNT(CASE WHEN C > 4 THEN 1 END) AS nooffamiliesHavingcountgreaterthan3
FROM
(SELECT
COUNT(*) AS C
FROM
user u
INNER JOIN
location l
ON
l.state_name='STATE' AND
l.some_other_column_id= 4 <------- Add your condition
u.user_id = l.user_id
INNER JOIN
country c
ON
c.location_id = l.location_id
GROUP BY
u.House_No) t
<强> EDITED 强>
在大多数情况下,JOIN比子查询更快,并且子查询的速度非常快。 我接受使用子查询更合乎逻辑且易于理解,但是当它涉及性能时,它不如连接那么好。 如果您正在使用连接,您的数据库将自行优化您的查询,这不是子查询的情况。 尝试对您的两个查询使用explain,您将清楚地了解查询的执行方式。
希望这会有所帮助......
答案 1 :(得分:1)
你可以尝试下面的内容:
SELECT COUNT(COUNT()&lt; = 1 THEN 1 END时的情况)AS nooffamiliesHavingcount1, COUNT(在2和4之间计数()的情况下,然后结束2)作为nooffamiliesHavecount Between2And4, COUNT(COUNT(*)&gt; 4结束时的情况)作为nooffamiliesHavingcountgreaterthan3 来自用户用户 内部联接 (从位置loc中选择user_id Inner Join country con 在loc.location_id = con.location_id,其中state_name ='STATE')为temp
在House_No 上的user.user_id = temp.user_id组