我们在日常工作中都会用到数据查询。在数据查询方面,我们应该如何去进行优化呢?
【微软专家】作为一个优化器的目标,是当用户写一个查询时,可以用您很自然的方法来写,而不需要担忧这个优化器是否能够形成一个很好的计划。你如果能够用一个很好的计划来写这个查询,同时,我们的优化器能够生产一个很好的Plan,那么我们这个优化器的目标就达到了。
首先很重要的一点,你需要表上有好的统计数字在上面。SQL Server对于这些统计的更新是在缺省情况下自动发生的。但是在有些情形下,比如说表很大,或者是统计分布不是按照通常的那种分布时,你有的时候需要手动来更新。所谓的手动更新就是你来运行一个任务,来更新统计数字,特别是在运行时一定要Full Scan,这样来保证你的数字都是准确的。
第二,您一定要保障您在表上有正确的索引。有好的索引通常对于查询的性能有很大的影响。SQL Server中有两个工具可以帮助您建立好的索引。一个叫做数据库调优建议。它是如何运行的呢?你在运行查询时,数据库调优建议这一工具,就可以根据你查询的类型、既有的模式,它可以做一些推荐出来,告诉您需要在哪些表上有哪些索引。另外一个工具叫做缺失索引DMV。也是需要你运行一些查询,当过一段时间之后,DMV会告诉你有哪些可能的索引是缺失的,会建议你把这些索引加上去。这就回到一开始讲的,为了有好的查询性能,正确的索引是非常重要的。SQL Server 2005就有这样两个工具来帮助你建立正确的索引。
第三,我在看到一些用户在查询时,他们使用游标。比如你要做一个循环,每一次处理一行,这种做法会使得你的查询变得很慢,因为要一条条做。如果可能的话,你尽量不要用游标,而是把游标的方法变成一个单一查询来获取你所有需要的行和记录,就是用单一查询的方式,而不是游标的方式。