vlambda博客
学习文章列表

Labview数据库查询问题解析

       数据的增删改查是我们必不可少的操作,但是在数据量很大的时候一些细微的差别往往影响用户的体验效果,今天我们来讨论一下数据库查询数据的几种方法看看他们之前的差别。

  1. 新建数据库连接,插入1000条数据

  1. 1.select * from查询所有数据

  2. 用模糊查找select * from  表名称   where  列名称 LIKE 值

  3. 根据列名查询数据select * from 表名称   where  列名称  = 值

  4. 查询指定列数据SELECT 列名 FROM 表名;

由于我这边电脑一运行就崩溃就不做代码演示了,通过我做的测试我总结出以下规律:

查询所有的数据是执行效率最高的,根据列名查询数据次之,执行效率最低都是模糊查询,所以当我们执行大量查询数据的时候应该少用模糊查询尽量用别的查询代替。

  1. 当我们的数据库达到千万级别的时候即使用执行效率最高的查询方式那么用户体验依然很差,之前做实验室要耗时1到2s ,那么遇到这样的情况我们改怎么处理呢,最可靠的方法就是预查找,先把你要的数据查出来,然后在在这一部分里面查找数据,这样效率会高很多。预查找代码如下:(意思就是临时新建了一个数据库)

declare@mCurveBeginTableName varchar(MAX)

declare@mCurveEndTableName varchar(MAX)

declare@mCharacterBeginTableName varchar(MAX)

declare@mCharacterEndTableName varchar(MAX)

declare@mStrTemp1 varchar(MAX)

declare@mStrTemp2 varchar(MAX)

declare@mStrTemp3 varchar(MAX)

declare@mSqlString varchar(MAX)

declare@mTestID bigint

declare@mWhileStep int

set@mTestID=%d

SELECT

       @mCurveBeginTableName=CurveBeginTable

      ,@mCurveEndTableName=CurveEndTable

     ,@mCharacterBeginTableName=CharacterBeginTable

      ,@mCharacterEndTableName=CharacterEndTable

FROMTestInfo where TestID=@mTestID

ifOBJECT_ID ('tempdb..##CharacterTemp') is not null

droptable ##CharacterTemp

ifOBJECT_ID ('tempdb..##CurveTemp') is not null

droptable ##CurveTemp

if(Len(@mCharacterBeginTableName)>5)AND (Len(@mCharacterEndTableName)>5)

BEGIN

select@mStrTemp1=replace(@mCharacterBeginTableName,'Character','')

select@mStrTemp2=replace(@mCharacterEndTableName,'Character','')

set @mWhileStep= @mStrTemp1

set @mSqlString=''

while @mWhileStep<=@mStrTemp2

        BEGIN

               if @mWhileStep<10

                      set @mStrTemp3='Character00'+CONVERT(VARCHAR(1),@mWhileStep)

               else if @mWhileStep<100

                      set @mStrTemp3='Character0'+CONVERT(VARCHAR(2),@mWhileStep)

               else

                      set @mStrTemp3='Character'+CONVERT(VARCHAR(5),@mWhileStep)                   

               /*判断表是否存在*/

               IF  EXISTS(SELECT * FROM sys.objects WHEREname=@mStrTemp3 AND type in (N'U'))                

                      BEGIN

                             if@mWhileStep!=@mStrTemp1

                                    /*临时表存在*/

                                    set@mSqlString='insert into ##CharacterTemp select * from '

                             else

                                    /*临时表不存在*/

                                    set@mSqlString='select * into ##CharacterTemp from '

                                                 

                             set @mSqlString +=@mStrTemp3+' where TestID='+CONVERT(VARCHAR(20),@mTestID)

                             exec(@mSqlString)                                                

                      END

               SET @mWhileStep+=1                                   

        END

END

 

在查询数据之前先新建临时表,这样会减小一部分数据量用户体验会好很多,不会有卡顿的现象产生。