MSSQL数据库中有大量数据,几十万,如何找到指定数据显示,并删除

MSSQL数据库中有大量数据,几十万,如何找到指定数据显示,并删除,第1张

先找是否有符合条件的数据

select count(1) from table where 你的条件,如果有的话就

delete table where 你的条件

几十万条数据不是问题,现在淘宝网数据都上千亿条了,照样运行

select distinct(selabel) from labprosellog where isdel=0 and selabel not in (select distinct(selabel) from labprosell)

这句可以找你你要删除的数据?那删除的语句就是:

delete FROM labprosellog where isdel=0 and selabel not in (select distinct(selabel) from labprosell)

图形界面的程序,一般是注重人机交互体验的,往往也不只提供一种功能,就像你的程序应该不是仅仅为了显示数据,在显示后,还要响应鼠标、键盘的事件,分别完成不同的功能,最起码点X要退出吧。

所以,加载大量数据,占用CPU和系统总线资源,使得程序无法从容响应其它事件,最佳办法是采用多线程,将占用资源深广的活儿另辟线程完成,主线程负责界面的展示和其它小规模事件的响应。当然了,如果数据加载线程的活儿还没有竣工,而用户刚好就要访问时,主线程就需要有办法了解进度、提示用户等待等能力,当由线程通讯和同步实现。

delphi的TThread类中有Synchronize方法用来同步,也可根据负载度,在主窗体和线程类中派生几个方法,基于windows消息也可实现通讯。

如果数据库是SQL Server,可以这样做: 找到输入日期的所在的周一,然后将数据范围限制在这个周一到下个周一之间(包括此周一,不包括下个周一)。所以,关键就在计算周一是哪一天(SQL Server中一周第几天受@@datefirst影响,默认值为7,即周日为一周第一天,但是这里需要周一为一周开始)。

1

2

3

4

5

6

7

declare @dateValue datetime, @startDay datetime

set @dateValue = '2014-11-11' -- 赋需要查询的日期值,不包含时分秒

set @startDay = dateadd(d, CASE WHEN datepart(dw, @dateValue) + @@DATEFIRST > 8 THEN 8 - @@datefirst ELSE 1 - @@datefirst END, dateadd(d, - datepart(dw, @dateValue) + 1, @dateValue))

select

from data_table

where date_field >= @startDay and date_field < dateadd(d, 7, @startDay) --将数据限制在从周一开始的7天内

order by date_field -- 按日期升序排列

如果是其他数据库,则可以使用类似方法实现。

问题描述 在通常的三层构架下 客户通过Browser请求Web服务器查询数据库 而查询结果是上千条甚至是上百万条记录 要求查询结果传送到客户端浏览器并分页显示

考虑因素

Web服务器的资源消耗 包括 内存(用来存储查询结果) 数据库相关资源(数据库连接对象 ResultSet对象等等)

DB服务器资源的消耗 包括游标 会话等等

网络开销 包括与数据库建立会话 传输查询结果等等

JDBC中的几个重要Class:

A ResultSet object maintains a cursor pointing to its current row of data Initially the cursor is positioned before the first row The next method moves the cursor to the next row and because it returns false when there are no more rows in the ResultSet object it can be used in a while loop to iterate through the result set

ResultSet是直接在数据库上建立游标 然后通过ResultSet的行位置定位接口来获得指定行位置的记录 当用户通过get方法获取具体纪录的内容时 ResultSet才从数据库把所需数据读到客户端

Oracle的ResultSet实现似乎会在本地缓存用户读取过的数据 导致内存消耗会随读取数据的增加而增加 这样 如果一次查询并读取海量数据 即使读出数据后马上丢弃(比如直接写入文件) 内存消耗也会随查询结果的增加而递增

The RowSet interface extends the standard java sql ResultSet interface A RowSet object may make a connection with a data source and maintain that connection throughout its life cycle in which case it is called a connected rowset A rowset may also make a connection with a data source get data from it and then close the connection Such a rowset is called a disconnected rowset A disconnected rowset may make changes to its data while it is disconnected and then send the changes back to the original source of the data but it must reestablish a connection to do so

RowSet是JDBC 中提供的接口 Oracle对该接口有相应实现 其中很有用的是 oracle jdbc rowset OracleCachedRowSet OracleCachedRowSet实现了ResultSet中的所有方法 但与ResultSet不同的是 OracleCachedRowSet中的数据在Connection关闭后仍然有效

解决方案一 直接使用ResultSet来处理

从ResultSet中将查询结果读入collection 缓存在>

以Matlab R2012b为例。

首先打开matlab;选择current folder并加入当前路径;选择指定的txt文件,右键,选择导入数据;选择相应的数据类型,这里应选matrix。

具体如下图所示:

1、开始导入数据。

2、导入数据。

以上就是关于MSSQL数据库中有大量数据,几十万,如何找到指定数据显示,并删除全部的内容,包括:MSSQL数据库中有大量数据,几十万,如何找到指定数据显示,并删除、如何提高Delphi从数据库中取数据和数据加载的速度、如何在数据库取出本周的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9532206.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存