cvi sqltoolkit 中DBFetchNext()函数访问SQL Server 速度慢,是否cvi Database Assistant会好点?
SQL toolkit和Database assistant都是基于microsoft ActiveX开发的,所以本质上是一样。您可以看下下面对于提高访问速度的一点点建议
The Database Connectivity Toolset使用ActiveX和数据库进行通信。大量读取数据,如创建/消除ActiveX变体数据类型,将使用大量的计算机资源。同时,在读数据时将调用不同的链接方式和软件层。可以通过以下方式判断某些查询语言耗时的原因,并尝试最小化系统开销。
1、链接方式:ODBC是链接数据库的最常用的方式。然而,这种方式将使用最多的软件层,因此是最慢的链接方式。如果可以,试着利用OLE DB驱动代替ODBC。另一个不使用ODBC的原因是,它是旧标准,数据库制造商都未对其进行进一步的优化,而是将注意力转到了OLEDB。
2、有时,我们不需要一次性读取表格中的所有内容——与读取一大块数据文件类似,我们可以一次读取“一大块”数据。如Database Connectivity Toolset User Manual第五章所述,应用Database » Advanced palette 下的VIs进行数据读取的配置。同样,也可以参考在线帮助文档中给出的VIs范例。
3、请在 LabVIEW » Examples » database » DatabaseEx.llb.查找到范例 Read All Data。该范例中的子VI的编写原则就是使用了最少的计算机资源,返回2维字符串数组。虽然这些VI是高效的,但是这种数据读取的方式不能在Database Connectivity Toolset的其它地方使用,原因就在于它返回的数据类型是2维字符串数组。因此,需要使用索引字符串并将其转换为所需的数据类型。如果数据是二进制,并且包含数组、簇或者其它复杂的数据类型,你必须要使用Unflatten From String函数( Advanced » Data Manipulation)。 Read All Data中使用的方法同样对于“空值”不适用,但在LabVIEW7.0中得到了修正。
4、影响数据库查询执行速度的最重要因素可能是数据库表格的结构。这已经超过了LabVIEW和toolset的范围了。导致执行速度慢的最普遍的原因就是用一张表存储了所有的信息。更好的方式是使用特别的存储模型,如关联模型,来进行信息的存储和处理。
5、数据库管理系统 (DBMS)的类型也是重要的因素。许多用户注意到了,使用Access数据库时受到的限制,当转到SQL Sever时将不复存在。相对于其它DBMS,某些DBMS具有更多的特性,同时进行了优化。每个DBMS有其特有的SQL语法--PL-SQL(Oracle)、T-SQL(SQL Sever)等。因为Database Toolset 使用通用的API函数与不同类型的DBMS进行通信,因此它使用标准的SQL语言。如果使用高级数据库VI(如DBTools Execute Query VI)创建自己的SQL语言,那么可以使用特定的DBMS命令进行更快的查询。最有效的方式就是使用“query analyzer”测试不同的查询命令,为执行最快的命令创建一个已存储的步骤。
对于在LabVIEW(或者其它开发环境)中数据库查询的加速方法没有一个简单的答案。上面给出的建议可以缩小可能原因的范围。一旦找到了根源,就可以更容易地找到解决方案。