查询视图的数量很慢,并且换成select count(*) form (select ....)也是很慢,怎么解决
是不是视图本省执行就很慢,如果是的话,就得优化视图中的查询。
不是啊
并不慢,就是查询数量很慢
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
@灬丶: select * from 视图
检索出所有数据,慢不?
@保镖: 没有啊
@灬丶: select count() 不可能比select 慢吧?
select * from 需要等数据都检索出来看看时间。
你是通过查询分析器看的吗?
@保镖: 感觉要等7秒,但是查数据1秒就出来了
@灬丶: 1秒能把所有数据都刷出来?视图总共能检索出多少条数据?
@保镖: 总过只有15条
@灬丶: 用查询分析器看看执行计划吧
@保镖: 额,那个还没用过
已解决,加个索引就好了
@灬丶: 那还是视图中的查询比较吗。
@灬丶: 那还是视图中的查询比较慢,视图也可以建索引的。
@保镖: 那为啥查询具体的数据信息比查询count要快的多
@灬丶: 具体为什么需要看查询分析器的执行计划,你啥数据库呀?看看两中查询有啥区别。
并且我现在写项目,除了物化视图之外已基本不用视图了。
@灬丶: 还有如果只是要查询记录数,可以直接写sql,把一些没必要的关联去掉。
@保镖: 必须关联的
@灬丶: sql中的字段不用都写吧?
select count(1) from
都试过了,也是很慢
@灬丶: EXISTS判断里面去掉后快么?再看看innerjoin去掉后呢?
EXISTS里面你是全表扫描
innerjoin也是
@rqx: 我试下
已解决,加个索引就好了
像 like 和 is null 都很影响查询速度
那为啥查询具体的表数据不慢啊
@灬丶: 你要讲道理的,视图中的查询语句复杂,能快吗,单独一个表你上百万条数据和上万条数据查询你再试试like 看看快不快
@徒然喜欢你: 直接这样查数据并不慢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就慢了
你可以试试这样,这是我之前做的一个项目,因为那部分数据不常用,很影响查询效率,所以就给他设置一下,需要那部分数据的时候在把那部分SQL语句放进去。
@灬丶: 用Count(*)要地方换成Count(0),这样应该会比Count(*)快一点;尽量不要用count *或者select *使用*会让数据库需要做额外的操作,尽量传入明确的字段或字段序列。
@徒然喜欢你: 已解决,加个索引就好了
排除一下,找到导致速度慢的是哪部分
已解决,加个索引就好了
不要 select * ,你把代码改成 select c1,c2,c3,c4 试试!
已解决,加个索引就好了
没道理,单独运行视图快,select count(*) form 视图就慢很多啊 你这应该是拿视图连接到其他表查询了吧
已解决,加个索引就好了