SELECT * FROM xsd INNER JOIN ywry ON xsd.czry = ywry.ygbm
where xsd.rq between '2012-10-10' and '2012-10-11'
用上面的语句查询很慢,5分钟还没有结果
select * from xsd where xsd.rq between '2012-10-10' and '2012-10-11'
只有约1000条记录
改为
SELECT (select ygxm from ywry where xsd.czry = ywry.ygbm ) as 操作人员 , * FROM xsd where xsd.rq between '2012-10-10' and '2012-10-11'为什么呀?
where xsd.rq between '2012-10-10' and '2012-10-11'
用上面的语句查询很慢,5分钟还没有结果
select * from xsd where xsd.rq between '2012-10-10' and '2012-10-11'
只有约1000条记录
改为
SELECT (select ygxm from ywry where xsd.czry = ywry.ygbm ) as 操作人员 , * FROM xsd where xsd.rq between '2012-10-10' and '2012-10-11'为什么呀?
后者是先筛选日期段的数据后关联人员,所以速度就上去了。
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
Jul 9 2008 14:43:34
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
对象 'XSD' 的 78299 页中有 2051375 行。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
在你的ygxm表上搞上主键+ygbm 索引 应该就解决你的问题了
xsd.rq 这个日期字段上有索引吧优化器在处理的时候,应该是join 了两个表的所有数据 然后再筛选日期而第二个写法就是先删选出来在跟ygxm做嵌套查询。
你将查询改为
SELECT xsd.* FROM xsd INNER JOIN ywry ON xsd.czry = ywry.ygbm
where xsd.rq between '2012-10-10' and '2012-10-11'就没问题了
适当时候,再INNER JOIN增加JOIN的方式,如INNER LOOP JOIN、INNER MERGE JOIN
2. 表字段的关联是否是主键或索引关联
3. 条件过滤字段是否有索引