【求助】查询速度贼满鸟。。。求高人相助!在线等!
数据库里面, 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#