无法为该请求检索数据_高效数据检索优化应用程序性能

时间:2018-05-17  来源:公务员类考试  阅读:

  建议一:在数据库服务器过滤数据,而不是在应用程序上。
  在通常情况下,若是在服务器上过滤数据,其效率始终会高于将数据发送到应用程序,然乎在应用程序上对数据进行过滤。如当应用程序利用Select * FROM 语句,要求数据库服务器将所有列数据返回给应用程序,不论应用程序是否已绑定这些列以在程序变量中使用。但是,在应用程序中,往往不会把所有的列都显示出来。根据第一考试网的数据库开发经验,除非应用程序是根据客户需求进行自定义,否则的话,像那种套装软件,其为了能够满足不同企业的需求,往往会在数据库表中设置比较多的字段。故这返回给应用程序的字段,若其利用率能够达到60%已经算高了。这就导致从数据库服务器端传递给应用程序的数据,很多都是无用的。故在查询语句中,按名称只选择必要的列可避免不必要的网络流量。
  同时,这么设计还可以带来另外一个好处。如可以使得应用程序在表定义时更加的可靠,因为新添加的列不返回给客户端应用程序。在SQLServer服务器中,支持在服务器上过滤数据,以便给应用程序返回最小的所需数据。使用这个功能可以使得服务器与应用程序之间高耗费的网络流量减到最小。
  若在应用程序中带有用户自定义报表功能的话,这个建议就会非常有用。因为报表自定义系统,信息化管理软件的用户就可以利用这个平台,根据自身企业的需要,对报表进行自定义,选择自己所需要的字段内容。此时,应用程序在生成报表的Select语句中,就要根据用户自定义显示的内容,从数据库中查询相关的列。而不需要把对应表中所有列都查询出来。无疑,这可以在很大程度上提高应用程序的性能。
  建议二:应用程序应立即从数据库结果集中提取所有的行。
  当应用程序采用开放式数据库连接技术连接SQLServer数据库时,在执行查询前设置的语句选项决定应用程序如何从服务器请求结果集。默认情况下,数据库以最有效的方式发送结果集。即大部分情况下,数据库都假定应用程序立即才能够数据库结果集中提取所有的行。
  对于这一点,很多应用程序开发人员存在一个误解。他们错误的认为,请求默认结果集只按应用程序逻辑或者用户商业逻辑提取结果集中所需要的行,这会节省网络与应用程序的开销。其实,这是错误的。因为如果应用程序不马上从数据库结果集中提取所有的行的话,会阻碍其他应用程序客户端与服务器之间的连接,而且还会阻塞同一个事务中的其他工作。更严重的是,未从结果集中提取的行会导致数据库服务器上相关的表中加锁,从而有可能阻碍其他用户对于数据的更新。当信息化管理软件的用户越多,这个负面作用会越来越明显。故除非有其他的考虑,否则的话,应用程序在设计时,要立即从数据库默认结果集中提取所有的行。
  建议三:使用游标技术来改善大表数据的查询。
  不过,在实际工作中,仍然有一些应用程序无法一次性从数据库服务器中提取所有的结果行。如应用程序查询大表并且允许用户指定选择条件,此时,有可能数据库服务器会返回几万行,甚至达到上百万行。若让应用程序缓冲这么多的数据,那么应用程序的缓冲空间很快会被消耗殆尽;同时也增加了额外的网络流量。而终端用户,可能并不需要看到这么多的行。如在实际工作中,终端用户往往有一个不好的习惯。他们第一次查询数据时,往往会不选择任何查询条件查询数据。当他们看到查询出来的数据比较多时,才会尝试着去输入一些限制条件,如利用信息类别或者部分名字实现模糊查询等等。在这种情况下,应用程序提取和缓冲上百万条的记录,而用户最终仍然会丢弃这些行。这无疑会浪费很多的时间和资源。
  可是如果不马上提取所有的结果行,会产生建议二所描述的不利结果。那该如何是好呢?SQLServer数据库为了解决这个问题,提出了一个游标技术。在谈这个游标技术之前,先谈一个具体的例子,以帮助大家对于游标有一个感性的认识。#p#分页标题#e#
在一些成熟的应用系统中,当用户查询数据时,如果数据量比较多,则在应用程序的窗口中,显示的是一个屏幕的数据。也就是说,应用程序并不立即从数据库中提取所有的行;而只提取一屏幕的行。当用户发现自己所需要的数据并不在这个屏幕中,则可以点击“下一屏”等类似的按钮,让应用程序窗口显示其他的内容。用户每点击一次,应用程序就从数据库服务器中提取一屏幕的行。此时,因为用了游标技术,所以数据库管理员不用担心未提取的数据行产生的锁冲突问题。
  那么游标技术到底可以带来哪些收益呢?
  首先,数据库提供服务器游标允许应用程序从任意大的结果集中提取行子集或者行快,如上面例子中的一屏幕行。如果用户想看到同一结果集中的其他数据,服务器游标允许应用程序从数据库结果集中提取任何其他的行块,如结果集后面的N行、前面的N行、或者中间某行后面的N行等等。数据库服务器只根据需要执行每个块提取请求。最重要的是,数据库服务器通常不会在服务器游标上的块提取之间对表或者表中的行加锁。如此的话,即使应用程序未从数据库服务器中提取所有的结果,那么也不影响其它用户对这数据表结果的修改。
  其次,服务器游标可以简化数据的操作。如服务器游标允许应用程序对于提取的行执行定位更新或者删除,而不需要确定行的源表与主键。如果行数据从提取到请求更新的这一段时间内被用户更改了,则数据库服务器也会检测出这个问题并采用相关的措施来防治丢失更新。
  不过除非有特殊的需要,否则的话,并不建议在数据库与应用程序的开发过程中采用游标技术。因为游标技术会带来一些额外的开销与负面作用。服务器游标技术需要付出一定的代价,比较天下没有免费的午餐。如给定查询的所有结果都要在应用程序使用,则服务器游标总是比默认结果集要耗费更多的资源。换句话说,如果应用程序的查询结果,用户都要导出来使用。此时,若采用游标技术,则就不是一个很好的选择,因为其会比默认结果集耗费更多的资源与时间。
  默认结果集始终只需要在服务器端与客户端往返一次。但是,每次使用服务器游标调用提取行块操作便导致一次往返。但纪录量越多,则其往返次数也会越多。另外,服务器游标也会消耗服务器上的资源。为此,只有在应用程序需要这些服务器游标时才使用这些服务器结果集或者可更新的结果集,则使用服务器游标技术提取大小适中的块。
  在实际工作中,有些信息化管理系统就提供了一些诸如应用程序之类的工具,来帮助应用程序是否需要采用游标技术。如他们会在某个窗口或者报表的自定义平台上,提供一个是否需要采用游标技术的按钮(不同应用程序提供的按钮名字不同,但是作用类似)。当系统维护人员认为表中记录量比较大,利用游标技术可以改善查询效率时,只需要选择这个按钮即可。如此的话,应用程序就不会从数据库服务器中一次性提取所有的行。
  而有些信息化管理软件,则会自动判断。如应用程序一次查询其返回结果超过一定的行时,其就会利用游标技术来改善查询性能。如到返回的记录超过一屏幕行时,就会自动采用游标技术。这也是一种不错的设计方案。
  从上面的分析中,我们可以看出,在应用程序设计的时候,若能够适当考虑数据库性能方面的内容,那么无论是应用程序性能,还是数据库性能,都能够都到有效的改善。毕竟,如果数据库性能不好,应用程序的性能无路如何都提不上去。故采用高效数据检索,可以同时优化数据库服务器与应用程序的性能。

无法为该请求检索数据_高效数据检索优化应用程序性能

http://m.kwkids.com/gongwuyuan/8412.html

推荐访问:
相关阅读 猜你喜欢
本类排行 本类最新