日期:2014-05-18  浏览次数:20563 次

多个连接查询很费时
查询包括20张表,使用了16个连接
每张表数据暂时不是很多,但是查询时间已经快一分钟了


------解决方案--------------------
分析下SQL语句有没有问题,存不存在笛卡尔积的情况,当然结果不希望是笛卡尔积的时候。

索引什么的楼主都懂是吧!
------解决方案--------------------
探讨
查询包括20张表,使用了16个连接
每张表数据暂时不是很多,但是查询时间已经快一分钟了

------解决方案--------------------
对相关字段建立索引,优化你的查询语句,提高你的硬件配置能提高你的查询速度.
------解决方案--------------------
除了添加索引外,是否可以考虑测试一下用临时表来实现部分子查询,然后用临时表内容来连接和只用连接哪个更快些.
------解决方案--------------------
探讨
部分不使用连接,使用子查询效率会好一点吗?

------解决方案--------------------
探讨
但是需要在那么多张表中查询数据,有什么其他的途径?

------解决方案--------------------
如果是视图 可以用索引视图试试
------解决方案--------------------
SQL code
---索引视图

索引视图是具体化的视图

--创建索引视图
create view 视图名 with schemabinding 
as
select 语句
go

---创建索引视图需要注意的几点
1. 创建索引视图的时候需要指定表所属的架构
--错误写法
create view v_f with schemabinding 
as
select
   a.a,a.b,b.a,b.b
from
   a join b 
on
   a.id=b.id
go

---正确写法:
create view v_f with schemabinding 
as
select
   a.a,a.b,b.a,b.b
from
   dbo.a join dbo.b 
on
   a.id=b.id
go


2.在创建索引视图的select语句时,不使用*,必须指定具体的列名
--错误写法
create view v_f with schemabinding 
as
select
   *
from
   dbo.a join dbo.b 
on
   a.id=b.id
go

---正确写法
create view v_f with schemabinding 
as
select
   a.a,a.b,b.a,b.b
from
   dbo.a join dbo.b 
on
   a.id=b.id
go

3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了

4. 只能为索引视图创建唯一聚集索引
--正确的写法
create unique clustered index ix_uniquetb on v_tb
go

--错误的写法 
create clustered index ix_uniquetb on v_tb
go

------解决方案--------------------
如果不用视图 可以放入临时表处理 关联字段加索引
------解决方案--------------------
索引不全
------解决方案--------------------
1.临时表
2.视图
3.索引
------解决方案--------------------
嵌套查询·····
------解决方案--------------------
临时表,index
------解决方案--------------------
探讨
如果不用视图 可以放入临时表处理 关联字段加索引

------解决方案--------------------
1.临时表
2.视图
数据量大的时候索引是必需的 。
------解决方案--------------------
视图还不如直接对表查询,做好相关的索引,如有必要使用临时表。
------解决方案--------------------
建立索引视图试试