Database 板


LINE

常常会听到有这种说法: "select动作很慢 是不是 Hardware/OS/database config 有问题" 大致上归类有以下几种情形 (这是我自己的分类~~呵~~) 1.应用程式 这边我指的是 - 设计与实作 这个部分也是最容易看到效果也最不花钱的 但是最花时间 @@ 设计 通常是比较难解决的 如 table design 的错误 想改正 可能要整个打掉重做 若是开发中或是测试用的系统可能还好 但是...prod DB怎麽可以说停就停说打就打 有些机器整年都不能停...那怎麽办? @@" 实作 这一段就是重点了 我所经验过的效率问题(虽然不是很多经验) 80%以上集中在这一块 一般程式师由於对资料库的"操作"不熟悉 因此好像总有个印象认为只要懂得 SELECT、JOIN、Group 就好 也就是只求正确(嗯...Schedule的压力问题我们不讨论 = =) 我所说的操作并不是单纯下下SQL就OK 而是一些基本可以避开的问题点 算是基础观念 在这一方面 如果可以做到尽可能避免这些问题 不只可做出效率佳的程式 也可减少在硬体上的成本浪费 以下与资料库本身的厂家设计无关 我想应该通用吧 ^^ 大部分我还是以 Oracle 为主 A).存取Data的数量 不必要的data勿 select 出来後再剔掉 尽量在SQL上将存取的限制做好 程式可以少处理一笔就少处理 B).Index的使用 适当使用Indexes 在random access时可以确保程式的效率 但也需要避免Indexes的滥用 如一个table有 10以上的 indexes 不要怀疑 就是会有 = =" 我想各个资料库的Index基本原理是大同小异的 但可以提供的功能确可能不太相同 如: 栏位是否可以倒置 存取资料超过整个table多少%时 Index反而浪费Resource 这些需要查过手册才知道 C).网路传输 这是最容易被忽略的一个部分 常常程式师会将Business写在前端(指非资料库)的程式中 因此 将data透过网路由Client(包括Applicatin Server)处理 在网路传输上面浪费时间是一件可怕的事 我们很可能无法察觉原来程式的效率瓶颈出在这里 我曾试过 将整个 program 写在 Store Procedure/Function中 与写在前端的应用程式中 使用相同的 SQL , Data数量 , database config 速度可以相差到 10倍 = =" D).批次工作的分配 有资料产生 就一定有报表需求 报表通常是User最会Complain的一个部分 我们可以将这些批次工做分配到时间轴上 而不是一次跑完 举例说明 若系统每月需产生月报表 则每日将当日结算资料设计产生至另一个日结算table 跑月报表时将可以大大节省时间 当然 有些情况下 无法设计日结算的table(可能因BUSINESS问题) 这就需要靠各位的 Know How 及智慧去解决噜 E).转个弯会不会更好 有些时候无法避免 需要存取的 data就是这麽多 上面提到的几点也都考虑了 但还是跑很久 由於data原本就需处理这麽多 这时是不是用些偷吃步的做法(呵~) 可能会让程式跑的更快 举例 将需存取的资料先暂存於某一temp table 再进行处理 这一部分的应用需要对资料库本身的Feature有一定的了解 否则反而会造成其他资料库的影响 2.系统异常 嘿...这个呢 有可能发生在任何一个环节 OS NETWORK DATABASE 都有可能 不过 异常通常会导致...完全没办法动 = =" 如 Oracle 8i 中 temporary segment会发生的错误 storage parameter setting 所以 也跳过 (我看是不知从何讲起吧 噗~) 3.Hardware/OS/database - Config 有问题 这个我们不讨论 (是因为不知道怎麽讨论吧 @O@ ) 因为发生的机会实在...不高 config 有问题 机器开始跑的第一天就会知道了 不会等到跑了好一阵子才出现 = = ===================================================== 如果以上的问题都已经处理过了 还是不满意 那就...花钱买硬体吧 不过扩充硬体实在是个无底洞 @@" 而且效果有限得很... 还有一点很重要 如果说... 你的资料库TABLE永远也不会超过 某一个数量(如 100,000 笔) 那...上面有些情况就可以不用考虑了 反正 ... 多做了些工 也感觉不出来快在哪里 QQ 最後要提到 Performance Tuning 永远都是很花时间的 需要实际资料量的执行以得到真正的tuning效果 评估永远是评估 实作完测试後才知道 - 改变後的做法及测试的问题点究竟是不是问题所在 以上如有谬误 还请各位指点 ^^ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.145.230.2
1F:推 drkkimo:你没提到join呀 不过join要约十万多笔资料以上才会变慢 07/05 15:33
2F:推 come:join应该包含在schema设计里面吧 07/05 23:18
3F:推 razor:资料库管理系统对於查询有最佳化的实作 07/06 00:24
4F:推 b6s:我想come的意思是,join 光是顺序不同也会有影响。 07/06 08:25
5F:推 ppanerai:呵我指的是观念上比较容易忽略的部分,至於真正的细节 07/06 09:09
6F:推 ppanerai:我想大家都很清楚,应该不用说太详细 @@ 07/06 09:16







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP