Labview数据库查询问题解析
数据的增删改查是我们必不可少的操作,但是在数据量很大的时候一些细微的差别往往影响用户的体验效果,今天我们来讨论一下数据库查询数据的几种方法看看他们之前的差别。
新建数据库连接,插入1000条数据
1.select * from查询所有数据
用模糊查找select * from 表名称 where 列名称 LIKE 值
根据列名查询数据select * from 表名称 where 列名称 = 值
查询指定列数据SELECT 列名 FROM 表名;
由于我这边电脑一运行就崩溃就不做代码演示了,通过我做的测试我总结出以下规律:
查询所有的数据是执行效率最高的,根据列名查询数据次之,执行效率最低都是模糊查询,所以当我们执行大量查询数据的时候应该少用模糊查询尽量用别的查询代替。
当我们的数据库达到千万级别的时候即使用执行效率最高的查询方式那么用户体验依然很差,之前做实验室要耗时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
在查询数据之前先新建临时表,这样会减小一部分数据量用户体验会好很多,不会有卡顿的现象产生。