如何在SQL Server中访问数据

大体上,SQL Server 检索请求数据的方式只有两种:使用表扫描   使用索引

SQL Server将使用哪一种方法执行特定的查询呢,这取决于有什么样的索引可用,询问的是什么列。在进行什么类型的联结以及表的大小。

1使用表扫描:

表扫描是非常直观的过程。在执行表扫描时,SQL Server 从表的物理起点开始,浏览表中的每一行,当发现符合查询条件的行时,把这些行包含在结果集中。你可能听到过很多关于表扫描不好的事情,例如千万级别的数据时容易超时或死机。一般来说,这是真的。不过,在某些实例中,表扫描实际上可能是最快的访问方法,典型的情况是,当从相当小的表中检索数据时就是如此。在表的大小具体为多少时表扫描会成为最快的访问方法,这将随标的宽度和查询时特定性质的变化而变化。

注意:看看你是否可以说明,为什么在适当的时候在查询的WHERE子句中使用EXISTS可以极大的提升性能,使用EXISTS运算符时,SQL Server只要一找到匹配查询条件很快就会主动停止查找。如果有一个一百万条记录的表,表中第三个记录就是匹配的记录,那么,使用EXISTS选项会省去读取999 997条记录的工作量!NOT EXISTS也可以同样的方式其作用。

2使用索引:

当SQL Server决定使用索引时,实际上,其处理过程与表扫描多少有些相似,只是这样有些捷径。在查询优化过程中,优化器查看所有的可用的索引,然后选择最佳的一个(这主要基于在联结和WHERE子句中指定的信息,结合SQL Server保存的关于索引组成的统计信息)。一旦选定了索引,SQL Server在索引的树结构中导航,到达匹配查询条件的数据,再提取需要的记录。区别之处在于,由于数据是排序的,因此查询引擎知道何时到达当前寻找范围的终点。于是,它可以结束查询,或者在需要时继续移动到下一级的数据范围。思考一下到今天为止学过的查询主题,你可能会注意到,索引与EXISTS选项在作用方式上有惊人的相似之处。EXISTS关键字允许在找到匹配值后立即退出查询运行。索引利用类似的方式搜索数据的过程,因此使用索引能同样在这里停止。不过使用索引能同样或者甚至更好的改进性能。服务器可以了解什么时候不再存在任何相关的数据,并能在这里停止。不过使用索引甚至能更好,因为无需局限于布尔逻辑的情形中。可以在范围的开始和结束处应用同样的概念。可以非常快速查找数据而不是在整个表中搜索数据。

注意:不要从我对于索引与EXISTS运算符能为你做什么的比较中得出这样的印象:索引会完全取代EXISTS运算符,两者并不是互相排斥,他们可以一起使用,并且常常这样使用。这里把他们放在一起讲述只是因为他们可以了解何时完成自己的工作并能在抵达标的物理末尾之前退出,在这一点上她们具有相似之处。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章