NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

cvi sqltoolkit 中DBFetchNext()函数访问SQL Server 速度慢

cvi sqltoolkit 中DBFetchNext()函数访问SQL Server 速度慢,是否cvi Database Assistant会好点?

1)2010-2013研究生期间致力于NI图形化编程软件LabVIEW的研究和开发,并完成了多个污水处理和酒发酵自动化监控项目的软件开发;
2)2013-至今,致力于基于C语言的开发环境Labwindows cvi的研究开发,并在多个光学设备(F5500,F7500,SFP+,QSFP,100G)自动化装配机器软件开发中得到成功的应用;
3)精通C语言,XML,SQL Sever,Access开发,熟悉C++,C#,Teststand,AutoCAD,Pro/E,SVN软件;
4)精通NI PXI系统,NI motion运动控制 PCI7342/PCI7344/PCI7358,NI Vision VDM/VAS图像处理,NI DAQ PCI6221/PCI6210/USB6009数据采集,PXI系统以及SQL Toolkit
5)精通Advantech DAQ PCI1710/PCI1762,运动控制PCI1204/远程ADAM控制、西门子PLC200/PLC300、三菱PLC,施耐德、SMC、MISUMI等电气部件;
6)熟悉西门子、SMC/MISUMI、newport 2936R、Agilent、固伟GSD3033S、 keithley2000/2400/482/6748、KEYENCE、NI 、Advantech、ORIENTAL MOTOR、Guppy、pointGrey、OPTEM、OPT等仪表;
7)熟悉RS485、Modbus、GPIB、PROFIBUS-DP、TCP/IP、I2C、CAN、OPC等通信。
0 项奖励
1 条消息(共 2 条)
5,547 次查看

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(或者其它开发环境)中数据库查询的加速方法没有一个简单的答案。上面给出的建议可以缩小可能原因的范围。一旦找到了根源,就可以更容易地找到解决方案。

0 项奖励
2 条消息(共 2 条)
5,542 次查看