希望大家来讨论一个关于数据库性能方面的案例!

saintKnight 2002-05-26 10:10:11
现在有一个需求包含四种单价、四种数量,最后求四种总价,记录数大约有10万条:(总价=单价*数量),现有两种方案,请大家讨论一下哪种方案较好:
方案一、表结构如下:
单价1 数量1 总价1 单价2 数量2 总价2 单价3 数量3 总价3 单价4 数量4 总价4
10 100 1000 2 5 10 3 6 18 4 6 24
现要从该表中查询出所有记录的总价(共四种);即
select 总价1,总价2,总价3,总价4 from table;
方案二、表结构如下:
单价1 数量1 单价2 数量2 单价3 数量3 单价4 数量4
10 100 2 5 3 6 4 6
现要从该表中查询出所有记录的总价(共四种);即
select 单价1*数量1 as 总价1,单价2*数量2 as 总价2,单价3*数量3 as 总价3,单价4*数量4 as 总价4 from table;
当然两种方案都能查到记录,现在的问题是这两种方案在数据库的性能上有什么区别?哪种方案较优?望数据库方面的大虾们给予指导!
...全文
35 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianmaa 2002-05-30
  • 打赏
  • 举报
回复
弱水兄:

1 同意。有这可能。

2 两个不同字段数量的表在做SELECT *的时候,花费的读盘开销确实不一样。但是,对同一个表进行SELECT时,选*和部分字段,花费的读盘开销却相差无几,因为ORACLE是按记录读盘的。仅仅是返回的字段数不同而已。

3 通常建视图时都要指定字段,这点没有问题。但我是说,执行select不会引起view/procedure/function失效。
saintKnight 2002-05-29
  • 打赏
  • 举报
回复
那是当然CREATE VIEW MYVIEW2 AS SELECT COL1, COL2 FROM MYTABLE在创建的时候就是不考虑其他字段的
saintKnight 2002-05-29
  • 打赏
  • 举报
回复
这个问题到底会不会影响查询速度?怎么大家的意见不一致,我都不知道采纳谁的意见
KingSunSha 2002-05-28
  • 打赏
  • 举报
回复
to tianmaa(天马):
1、同一个表中,选一个字段和选多个字段在执行路径上很可能不同,比如典型的索引扫描和全表扫描,你做一下EXPLAIN PLAN就能知道
2、两个不同字段数量的表在做SELECT *的时候,花费的读盘开销是不一样的,所以执行速度也不同,排除其他因素应该字段少的速度快
3、举例如下,
CREATE TABLE MYTABLE (COL1 NUMBER, COL2 NUMBER); --建表
CERATE VIEW MYVIEW1 AS SELECT * FROM MYTABLE; --建视图1
CREATE VIEW MYVIEW2 AS SELECT COL1, COL2 FROM MYTABLE; --建视图2
ALTER TABLE MYTABLE ADD (COL3 NUMBER); --改表结构,加一个COLUMN
然后你可以看到MYVIEW1失效,而MYVIEW2不受影响
tianmaa 2002-05-28
  • 打赏
  • 举报
回复
弱水兄的最后的贴子难以理解。
在ORACLE中select 检索的速度并不在于选中的字段数,选一个字段和选*在内部操作并无不同,仅仅是返回的信息有区别。
同样,无论怎样select,也绝不会“引起有关联的view/procedure/function等失效”。
biti_rainy 2002-05-28
  • 打赏
  • 举报
回复
怎么会跟记录书没有关系?
我倒奇怪了

另对于楼上说的 select * 的问题
我一向的建议是: 这样的程序员应该接受再教育
saintKnight 2002-05-28
  • 打赏
  • 举报
回复
那么select A,B,C,D from table查询速度会不会与记录数也有关?
KingSunSha 2002-05-28
  • 打赏
  • 举报
回复
10万条记录的规模怎么做都差不多。。。

当然字段越多用select * from table会越慢,但是请养成一个好习惯:在select语句中尽量不要使用*,而应该把所需要的字段列表写出来,不需要用到的字段就不要查询。而且select *用的多,当改动表结构的时候就越可能引起有关联的view/procedure/function等失效,还要重新编译。这对维护工作是非常不利的。
saintKnight 2002-05-28
  • 打赏
  • 举报
回复
少量记录时,冗余可实现空间换时间。当数据库的记录数超过一定量后,能否实现空间换时间?如果数据库的记录数超过一定量后,增加字段实现冗余功能本身也造成对数据库的操作时间延长?打个简单的比方:
数据库中某表有10万条记录甚至更多时,当该表有10个字段与14个字段两种情况下执行select * from table哪种执行查询时间长?还是一样长?
tianmaa 2002-05-27
  • 打赏
  • 举报
回复
当数据量比较大时,要尽量减少冗余字段。这主要考虑系统的总体性能,减少冗余字段后,如录入、检索、汇总等操作性能会有所提高。当然,进行全表总价汇总性能比较差(因为要频繁计算),但不可能经常进行全表汇总,通常的操作多为检索和分类汇总,这时减少冗余比减少计算更有意义。

另外,如弱水兄所说,如果有冗余,数量、单价和总价有任何改变,都必须更新其他字段,在异常情况下可能会破坏字段间的关系。

不知道实际的方案,没法多说。但感觉这2种方案的结构都不太好,应该有更好的方案。
fredrick 2002-05-27
  • 打赏
  • 举报
回复
你的目的是为了提高查询的效率是吧,也就是需要时间优先,从程序设计的方法学考虑,时空矛盾也就不难得出答案,应该是空间换时间!!!
biti_rainy 2002-05-27
  • 打赏
  • 举报
回复
其实,就10万条记录的总价那点存储
不提也罢

冗余存储就可以了
biti_rainy 2002-05-27
  • 打赏
  • 举报
回复
这个……
看一眼题目
还以为是产品数据库优化的案例呢 :)

关于设计,总是存在空间和时间的矛盾
关键看自己怎么结合实际情况协调了


bzszp 2002-05-27
  • 打赏
  • 举报
回复
我觉得应当用方案一,方案二要占用服务器的计算时间,
一般的服务器运行了很多的服务,速度会很慢。
saintKnight 2002-05-27
  • 打赏
  • 举报
回复
难道大家觉得这个问题没有必要讨论?还是觉得很难?
saintKnight 2002-05-27
  • 打赏
  • 举报
回复
为什么要采用方案2,原因何在?
saintKnight 2002-05-26
  • 打赏
  • 举报
回复
当数据库中的记录达到10万条时,设计表结构时多设计了四个冗余字段会不会影响数据库自身的性能?在查询时会不会也造成一定的影响?
KingSunSha 2002-05-26
  • 打赏
  • 举报
回复
贴主问的其实是个数据冗余的问题,总价总归等于数量*单价。
第一种方案的查询速度肯定比较快,但是每次对单价或者数据的更新必须有相应的代码来更新总价,更新操作比较复杂一点。而第二种方案在速度方面比第一种慢,但是不需要写代码保持总价和数量、单价的同步。

两种方案各有优缺点,看你自己的需求和习惯。
saintKnight 2002-05-26
  • 打赏
  • 举报
回复
大概就是这个意思,比如计算机,它包括CPU的单价,硬盘的单价,内存条的单价等,和它们各个的数量,最后要算CPU的总价、硬盘的总价、内存条的总价等,如何设计这个表比较合理
lws0472 2002-05-26
  • 打赏
  • 举报
回复
你是不是还有货物啊,
就是说每种货物有且只有四个单价,四个数量?
加载更多回复(3)
【太阳能电池系统与逆变器】太阳能电池的电压输出被储存在电池中,同时直流电压通过五级逆变器转换为交流电(Simulink仿真实现)内容概要:本文档围绕太阳能电池系统与逆变器展开,重点介绍了一个基于Simulink的仿真模型,其中太阳能电池产生的直流电压被储存于电池中,并通过五级逆变器转换为交流电。该系统仿真涵盖了光伏发电、储能管理和电力电子变换的核心环节,突出了多级逆变器在提升电能质量和转换效率方面的优势。文中详细描述了系统结构、工作原理及Simulink建模过程,有助于理解可再生能源系统的能量转换与控制策略。; 适合人群:具备一定电力电子、自动控制或新能源系统基础知识的高校学生、研究人员及工程技术人员。; 使用场景及目标:①用于教学演示太阳能发电系统的能量流动与转换过程;②支持科研中对多级逆变器拓扑结构的性能分析与优化设计;③为微电网、分布式能源系统中的储能与并网控制提供仿真基础。; 阅读建议:建议结合Simulink软件实际操作,深入理解模型各模块的功能与参数设置,并可通过修改逆变器级数或控制策略进行拓展性实验,以增强对系统动态响应和稳定性的认识。
内容概要:本文全面解析了全国大学生智能汽车竞赛的赛事定位、赛制安排与竞赛类别,并通过武汉大学、成都理工大学等高校的经典参赛案例,深入剖析了智能车在视觉识别、机械结构设计、算法优化等方面的创新实践。文章进一步梳理了智能车开发的核心技术体系,涵盖感知层的多传感器融合与视觉AI部署、决策控制中的路径规划与运动控制策略,以及软硬件平台的协同架构。最后,基于竞赛技术延伸出智能物流分拣车、越野巡检机器人、多模态智能识别平台等实际应用项目,展示了从赛事到产业落地的技术转化路径。; 适合人群:具备一定电子、控制、计算机或机械基础的高校学生及指导教师,尤其适合参与智能车竞赛或工程实践项目的1-3年经验研发人员; 使用场景及目标:①了解智能车竞赛的整体架构与备赛策略;②掌握视觉识别、多传感器融合、运动控制等关键技术的设计与实现方法;③探索竞赛成果向智能物流、无人巡检、安防识别等领域的产业化应用; 阅读建议:建议结合具体案例与技术模块进行系统学习,重点关注技术突破背后的创新思维与跨学科整合方法,同时可参考文中项目实践开展原型开发与成果转化。

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧