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

【求助】查询速度贼满鸟。。。求高人相助!在线等!
数据库里面,   BizData有12万条数据,Data2Type有20万条数据,其他表很少,几十条。

这个是我的分页查询,现在查询的速度还要一秒多.

这个是第一个郁闷的地方,更郁闷的是:将最外层的where子句去掉,将select   *   改为select   count(*)或者select   count(bizdataId)。来得到未分页前的总行数,竟然要6秒。

目前索引情况:所有的表的外键都建立NonCluster索引。

求高手们帮帮我吧!!

select   *  
from
(
select  
BizUnit.bizUnitId,
BizClass.bizClassId,
Location.locationId,
BizType.bizTypeId,
ROW_NUMBER()   OVER(ORDER   BY   BizData.bizDataId)   as   rn
from
BizData,   BizUnit,   BizClass,   Location,   Data2Type,   BizType
where
BizUnit.bizUnitId   =   BizData.bizUnitId
and
BizClass.bizClassId   =   BizData.bizClassId
and
Location.locationId   =   BizData.locationId
and
Data2Type.bizDataId   =   BizData.bizDataId
and
BizType.bizTypeId   =   Data2Type.bizTypeId
)   as   a
where
a.rn   between   #StartIndex#   and   #EndIndex#

------解决方案--------------------
将表结合,把外层where条件放到里面试试
------解决方案--------------------
帮你顶一下

------解决方案--------------------
帮你弄漂亮点~~~高手些看起来方便
SELECT *
FROM
(
SELECT
B.BIZUNITID,
C.BIZCLASSID,
D.LOCATIONID,
F.BIZTYPEID,
ROW_NUMBER() OVER(ORDER BY A.BIZDATAID) AS RN
FROM
DBO.BIZDATA A WITH(NOLOCK),DBO.BIZUNIT B WITH (NOLOCK),
DBO.BIZCLASS C WITH(NOLOCK),DBO.LOCATION D WITH (NOLOCK),
DBO.DATA2TYPE E WITH (NOLOCK),DBO.BIZTYPE F WITH (NOLOCK)
WHERE
B.BIZUNITID = A.BIZUNITID
AND
C.BIZCLASSID = A.BIZCLASSID
AND
D.LOCATIONID = A.LOCATIONID
AND
E.BIZDATAID = A.BIZDATAID
AND
F.BIZTYPEID = E.BIZTYPEID
) AS A
WHERE
A.RN BETWEEN #STARTINDEX# AND #ENDINDEX#