如果你那个TXT文件时有规律的,可以尝试用:
SELECT 'Text1txt' AS FileName,
'txt' AS FileType,
FROM OPENROWSET(BULK N'C:\Text1txt', SINGLE_BLOB) AS Document;
--我这里写的,并不是可以直接用,还要视你的文本文件的格式定。如不明白可以参看微软的帮助文档。
1通常遇到这种问题,最初步的想法就是循环,读取数据库判断
2更进一步,由于循环访问数据库导致性能十分低下,是否可以先取出全集,到内存中进行比较,这里需要提醒的是使用HashSet或Dictionary判断是否存在比List性能要高
3但当全集数据量极大的时候,这种做法可能会导致内存不足,接下来考虑是否能缩小提取的范围
4提取原始数据时,直接只提取ID在需要比较的列表中,即selectidfromtablewhereidin(需要判断的id结果集),单数据提取到HashSet,kv的提取到Dictionary
5提取出in条件的结果集后,与待比较的ID进行对比,取出的结果集中存在的ID,即是已存在的信息,不存在的,就是新增的ID
根据你说的需求:
"可程序中需要查询每行的所有数据"、“查询全部九百万条数据”
-------------------------------
这样的需求跟索引没有关系了(因为已经肯定是走全表扫描的了),要提高效率的办法就是:1、提高硬盘的io速度;2、增加内存以使sql server有更多的缓存。
另外,你程序不要一次性取那么多数据返回,这样会拖死的,建议你考虑变换下处理逻辑(如:分批取回--可以根据id列值进行分批;将数据直接在服务端存成文本再传回本地处理)。
"而是需要根据这些数据逐一进行其他功能的 *** 作,这款程序是不联网的"
--------------------------------
就算这样的话,也不能一次性把9百万数据一次性取回,如果你非要取出来再 *** 作的话,那你得考虑分批去取。或者你把处理逻辑写在存储过程,然后由SQL SERVER本身去完成逻辑处理。总之,不管怎样,你也是得优化你现在的处理逻辑(现有处理逻辑我觉得不合理,效率很低下)。
“真正部署到电力网的服务器上速度会不会提高呢”
------------------------
服务器当然比你本地要快得多啦,硬件配置根本就不同一个级别,但不管怎样,还是建议你参考上面的建议优化你的处理逻辑才行,否则,你系统的效率将很低。
首先在zd1和zd2上建立索引
Select [texts] from [tables] where (zd1<23456 and zd2>23456) or (zd1< 13567 and zd2>13567) or (zd1<67543 and zd2>67543)
上面这样只能在输出的时候按顺序对比排序
Select [texts] from [tables] where (zd1<23456 and zd2>23456)
union
Select [texts] from [tables] where (zd1<13567 and zd2>13567 )
union
Select [texts] from [tables] where (zd1<67543 and zd2>67543)
这样可以直接按顺序输出但不知道效率怎样
以上就是关于SQL里面批量对TXT文本数据进行查询全部的内容,包括:SQL里面批量对TXT文本数据进行查询、批量查询数据库是否存在某个数据、sql2008数据库,九百万条数据,如何快速查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)