WEB开发网
开发学院数据库MSSQL Server SQL开发中容易忽视的一些小地方(四) 阅读

SQL开发中容易忽视的一些小地方(四)

 2009-01-15 10:19:32 来源:WEB开发网   
核心提示: 订单表和会员表有一个关联字段为proxyID,各自均建有索引.查询语句如下:select * from order inner join member on order.proxyID=member.proxyIDwhere leaveDate between '开始时间'

订单表和会员表有一个关联字段为proxyID,各自均建有索引.查询语句如下:

select * from order inner join member on order.proxyID=member.proxyID

where leaveDate between '开始时间' and '结束时间' order by create_date desc

测试:

情况一:在create_date上创建非聚集索引.执行的IO和所用时间消耗如下图:可以看出这种情况对memer表进行了大量的表扫描. 83588次.

SQL开发中容易忽视的一些小地方(四)

情况二:删除create_date上的索引,按理来说应该会比有索引会慢些,下面是执行的IO和时间消耗图:

SQL开发中容易忽视的一些小地方(四)

对此我有以下发现:

1:order by 字段没有创建索引的情况下,对member表只扫描了9次.远少于创建索引时的83588次.

2:还有一个现象就是如果按在查询分析器中全部显示出数据来看,没有创建索引最终所用时更少.

3:创建索引的查询会比没有创建索引的查询早一步显示数据,不过最终完成的时间要长.

测试未知难题:

1:就查询速度来说,是早一步在查询分析器中显示数据的查询快还是说要看最终完全的时间来判断.(create_date创建索引的情况会更早显示数据,不过总共用时会比不创建索引的慢)园友zping曾告诉我不要看时间要看IO数量.不知道大家是怎么分析的.

2:在一个字段上创建索引为什么会引发member表的多次表扫描.

测试说明:由于SQL2005有缓存功能,所有两次查询的时间段并不相同,但数据量都差不多. 

Tags:SQL 开发 容易

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接