数据库里有一张表有100万数据, 现在要更新其中的两个字段a和b, 条件是两个字段原来的值要大于0

数据库里有一张表有100万数据, 现在要更新其中的两个字段a和b, 条件是两个字段原来的值要大于0,第1张

你想一个SQL语句就实现更新

那么可以使用case when来进行条件赋值,但是这可能会降低执行效能,因为where条件变得宽泛了。

示例SQL:

update table

set a = case when a > 0 then newValue else a end, -- 使用case when语句,如果a>0则赋予新值,否则赋予原来的值

      b = case when b > 0 then newValue else b end  

where (a > 0 or b > 0)   -- 这里条件用了or,会降低效能

SQL语句是:select 分类,ID from (select top 100 ID, 分类 from 表 where 条件筛选表达式 order by ID asc) as 新表 order by 分类 asc,ID asc

这个是按顺序把表格一和表格二等表格合并为一个表格。也就是一个结果集。

如果是要把表格一和表格二等表格分开显示的话,也就是多个结果集的话。将程序代码分两步做。

第一步:执行SQL语句将表格数量求出,也就是分类的值的不重复总数:

select count(分类) as 总数字段名 from (select distinct 分类 from (select top 100 ID, 分类 from 表 where 条件筛选表达式 order by ID asc) as 新表 ) as 新表2

第二步:按这个总数值作为循环次数循环执行SQL语句。得到各个结果集也就是显示表格:

for i:=1 to 总数 do

begin

执行SQL语句:select 分类,ID from (select top 100 ID, 分类 from 表 where 条件筛选表达式 order by ID asc) where 分类= (select top 1 分类 from (select top :i 分类 from (select distinct 分类 from (select top 100 ID, 分类 from 表 where 条件筛选表达式 order by ID asc) as 新表 order by 分类 asc) order by 分类 asc) as 新表2 order by 分类 desc) order by ID asc

注意:其中的短语:“select top :i 分类”中的:i表示i是循环变量。从1到总数。这样能按分类的顺序读取各个分类的结果集。并显示到表格中。

end;

body{

line-height:200%;

}

如何优化MySQL数据

当MySQL数据库邂逅优化,它有好几个意思,今天我们所指的是性能优化。

我们究竟该如何对MySQL数据库进行优化呢?下面我就从MySQL对硬件的选择、Mysql的安装、myf的优化、MySQL如何进行架构设计及数据切分等方面来说明这个问题。

1服务器物理硬件的优化

1)磁盘(I/O),MySQL每一秒钟都在进行大量、复杂的查询 *** 作,对磁盘的读写量可想而知,所以推荐使用RAID10磁盘阵列,如果资金允许,可以选择固态硬盘做RAID10;

2)cpu对Mysql的影响也是不容忽视的,建议选择运算能力强悍的CPU。

2MySQL应该采用编译安装的方式

MySQL数据库的线上环境安装,我建议采取编译安装,这样性能会较大的提升。

3MySQL配置文件的优化

1)skip

-name

-resolve,禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间;

2)back_log

=

384,back_log指出在MySQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中,对于Linux系统而言,推荐设置小于512的整数。

3)如果key_reads太大,则应该把myf中key_buffer_size变大,保持key_reads/key_read_requests至少在1/100以上,越小越好。

4MySQL上线后根据status状态进行适当优化

1)打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响也会很小。

2)MySQL服务器过去的最大连接数是245,没有达到服务器连接数的上限256,应该不会出现1040错误。比较理想的设置是:Max_used_connections/max_connections

100%

=85%

5MySQL数据库的可扩展架构方案

1)MySQL

cluster,其特点为可用性非常高,性能非常好,但它的维护非常复杂,存在部分Bug;

2)DRBD磁盘网络镜像方案,其特点为软件功能强大,数据可在底层块设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。

List<int> lstInts = new List<int>();

for (int i = 0; i < 100; i++) {

ThreadSleep(10);

long tick = DateTimeNowTicks;

Random ran = new Random((int)(tick));

lstIntsAdd(ranNext(1, 100));

}

Dictionary<int, int> dicInts = new Dictionary<int, int>();

for (int i = 0; i < lstIntsCount; i++) {

if (dicIntsContainsKey(lstInts[i])) {

dicInts[lstInts[i]] = dicInts[lstInts[i]] + 1;

} else {

dicIntsAdd(lstInts[i], 1);

}

}

if (dicIntsCount == lstIntsCount) {

ConsoleWriteLine("没有重复的!");

} else {

ConsoleWriteLine("有重复的!");

foreach (int num in dicIntsKeys) {

if (dicInts[num] > 1) {

ConsoleWriteLine(stringFormat("有{0}个{1}", dicInts[num]ToString(), numToString()));

}

}

}

ConsoleReadLine();

确保不重复的情况下 给这个键做索引 或者 在匹配步骤上将数据库的所有数值分批次取出存入到缓存中 利用高IO去完成匹配。

另外 关于 7位数字的生成 可以以1000000为基础去自增的形式生成。按照你的随机数理念 越到后面count的效率越低。

针对百T级别的实时数据,一些适合的数据库包括:

1 Apache Cassandra:Cassandra是一个开源的分布式NoSQL数据库,可以实现水平扩展,支持百T级别的数据存储和读取,并且具备高可用性和高性能。

2 Apache HBase:HBase是一个分布式的NoSQL数据库,特别适合存储大规模的结构化数据,并且可以提供实时读写 *** 作。它可以与Hadoop生态系统中的其他组件(如Hadoop、Hive和Pig)集成,支持海量数据的处理和分析。

3 MongoDB:MongoDB是一个基于文档的NoSQL数据库,支持高性能、高可用性和高扩展性,并且可以实现水平扩展。它还具有灵活的数据模型和强大的查询能力,适用于大规模的数据存储和处理。

4 Apache Druid:Druid是一个开源的分布式实时数据存储和查询系统,可以支持百T级别的数据存储和实时查询。它主要用于OLAP(在线分析处理)场景,可以提供快速的数据分析和查询功能。

需要注意的是,选择数据库时需要考虑到数据的类型、数据量、性能要求、数据一致性、容错性等因素,结合具体需求进行选择。

以上就是关于数据库里有一张表有100万数据, 现在要更新其中的两个字段a和b, 条件是两个字段原来的值要大于0全部的内容,包括:数据库里有一张表有100万数据, 现在要更新其中的两个字段a和b, 条件是两个字段原来的值要大于0、我要把access数据库里一个表,读取前100条,这100条再分类显示出来怎么做、数据库如何优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/sjk/10179922.html

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

发表评论

登录后才能评论

评论列表(0条)

保存