首页 新闻 会员 周边 捐助

select count(*) from 视图

0
[待解决问题]

查询视图的数量很慢,并且换成select count(*) form (select ....)也是很慢,怎么解决

灬丶的主页 灬丶 | 初学一级 | 园豆:9
提问于:2018-11-16 15:56
< >
分享
所有回答(6)
0

是不是视图本省执行就很慢,如果是的话,就得优化视图中的查询。

保镖 | 园豆:759 (小虾三级) | 2018-11-16 16:03

不是啊
并不慢,就是查询数量很慢

select phd.Phd_ProjectNumber, phd.Phd_ProjectName,phd.Phd_BuildRegion,
phd.Phd_ProvinceManagerId,phd.Phd_ProjectManagerId,phd.Phd_InitDate,COUNT(t.T_Id) as Phd_SumCount
from T_ProjectHisDoc phd inner join T_Task t on t.T_ProjectNumber=phd.Phd_ProjectNumber
WHERE exists (select * from T_PhotoReport pr where pr.Pt_ProjectNumber=phd.Phd_ProjectNumber
AND pr.Pt_TaskIds NOT LIKE '%,%'
AND pr.Pt_DeleteTime IS NULL )
AND phd.Phd_DeleteTime IS NULL AND t.T_DeleteTime IS NULL
group by
phd.Phd_ProjectName,phd.Phd_ProjectNumber,phd.Phd_ProvinceManagerId,phd.Phd_ProjectManagerId,phd.Phd_InitDate,phd.Phd_BuildRegion

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:06

@灬丶: select * from 视图
检索出所有数据,慢不?

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-16 16:11

@保镖: 没有啊

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:12

@灬丶: select count() 不可能比select 慢吧?
select * from 需要等数据都检索出来看看时间。
你是通过查询分析器看的吗?

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-16 16:14

@保镖: 感觉要等7秒,但是查数据1秒就出来了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:18

@灬丶: 1秒能把所有数据都刷出来?视图总共能检索出多少条数据?

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-16 16:19

@保镖: 总过只有15条

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:19

@灬丶: 用查询分析器看看执行计划吧

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-16 16:20

@保镖: 额,那个还没用过

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:21

已解决,加个索引就好了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-17 12:36

@灬丶: 那还是视图中的查询比较吗。

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-19 15:59

@灬丶: 那还是视图中的查询比较慢,视图也可以建索引的。

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-19 16:00

@保镖: 那为啥查询具体的数据信息比查询count要快的多

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-19 16:01

@灬丶: 具体为什么需要看查询分析器的执行计划,你啥数据库呀?看看两中查询有啥区别。
并且我现在写项目,除了物化视图之外已基本不用视图了。

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-19 16:04

@灬丶: 还有如果只是要查询记录数,可以直接写sql,把一些没必要的关联去掉。

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-19 16:06

@保镖: 必须关联的

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-19 16:11

@灬丶: sql中的字段不用都写吧?

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-19 16:12
0

select count(1) from

rqx | 园豆:468 (菜鸟二级) | 2018-11-16 16:08

都试过了,也是很慢

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:10

@灬丶: EXISTS判断里面去掉后快么?再看看innerjoin去掉后呢?
EXISTS里面你是全表扫描
innerjoin也是

支持(0) 反对(0) rqx | 园豆:468 (菜鸟二级) | 2018-11-16 16:14

@rqx: 我试下

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:15

已解决,加个索引就好了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-17 12:36
0

像 like 和 is null 都很影响查询速度

徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-11-16 16:14

那为啥查询具体的表数据不慢啊

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:15

@灬丶: 你要讲道理的,视图中的查询语句复杂,能快吗,单独一个表你上百万条数据和上万条数据查询你再试试like 看看快不快

支持(0) 反对(0) 徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-11-16 16:18

@徒然喜欢你: 直接这样查数据并不慢select phd.Phd_ProjectNumber, phd.Phd_ProjectName,phd.Phd_BuildRegion,
phd.Phd_ProvinceManagerId,phd.Phd_ProjectManagerId,phd.Phd_InitDate,COUNT(t.T_Id) as Phd_SumCount
from T_ProjectHisDoc phd inner join T_Task t on t.T_ProjectNumber=phd.Phd_ProjectNumber
WHERE phd.Phd_ProjectNumber in(select pr.Pt_ProjectNumber from T_PhotoReport pr where
pr.Pt_TaskIds NOT LIKE '%,%'
AND pr.Pt_DeleteTime IS NULL group by pr.Pt_ProjectNumber )
AND phd.Phd_DeleteTime IS NULL AND t.T_DeleteTime IS NULL
group by
phd.Phd_ProjectName,phd.Phd_ProjectNumber,phd.Phd_ProvinceManagerId,phd.Phd_ProjectManagerId,phd.Phd_InitDate,phd.Phd_BuildRegion
但是查数量count就慢了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-16 16:20

你可以试试这样,这是我之前做的一个项目,因为那部分数据不常用,很影响查询效率,所以就给他设置一下,需要那部分数据的时候在把那部分SQL语句放进去。

支持(0) 反对(0) 徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-11-16 16:22

@灬丶: 用Count(*)要地方换成Count(0),这样应该会比Count(*)快一点;尽量不要用count *或者select *使用*会让数据库需要做额外的操作,尽量传入明确的字段或字段序列。

支持(0) 反对(0) 徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-11-16 16:26

@徒然喜欢你: 已解决,加个索引就好了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-17 12:36
0

排除一下,找到导致速度慢的是哪部分

会长 | 园豆:12461 (专家六级) | 2018-11-16 16:22

已解决,加个索引就好了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-17 12:36
0

不要 select * ,你把代码改成 select c1,c2,c3,c4 试试!

何旭 | 园豆:306 (菜鸟二级) | 2018-11-16 17:24

已解决,加个索引就好了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-17 12:35
0

没道理,单独运行视图快,select count(*) form 视图就慢很多啊 你这应该是拿视图连接到其他表查询了吧

归来的小陆 | 园豆:75 (初学一级) | 2018-11-16 17:35

已解决,加个索引就好了

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2018-11-17 12:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册