PHP 板


LINE

看板 PHP  RSS
※ 引述《alpe (薛丁格的猫)》之铭言: : ※ 引述《characterlu (MineMine)》之铭言: : : 标题: [请益] 资料库规划问题 (MySQL) : : 时间: Tue Mar 13 23:48:04 2012 : : 资料库有两种规划方式 : : A: 有100个栏位 但资料有10万笔 : : B: 20个资料表,每个资料表5个栏位 资料有200万笔 : : 这两种方式,读取、写入、搜寻 : : 请帮忙比较这二种规划方式 : : 电脑负载及执行速度 : : 本身是新手,如果有问错的地方请多多包含 : : → eugene2528:这确实像课本问题 03/14 12:31 : 早上看到的时候也真的觉得好作业的问题 我也以为是作业文, 为什麽?怎麽看都是「未经思考」就丢出来的问题… : : → characterlu:先声明这并不是课本问题,是我实务上遇到的 03/14 13:07 : 在现在公司我目前经手的网站会员大概 7M+, 一个会员的资料过百个cols. : 1. 简单问一句, 你会很常一次就抓出 70 cols 吗? : 我猜不会... table 100 cols 光 programmer要看col就累了 : 2. 你会让 user 一次写 50 个栏位吗? : 我猜还是不会... 如果会... UI设计的人抓出去毙了 : 1 + 2 一般就可以让你打消 A 方案了. : 但... A会不会存在?? : 我可以肯定的回答 Yes, it's exist! 但通常用在统计 or 汇整. : 从效能看 : SELECT : 看你的怎样用. Index 建法 一般是 a >= b : 如果where条件都在一个table, : 其他table都是 join 资料, 那不会慢太多 : 你可以用 EXPLAIN 看看 SQL, 现在最佳化做的都不错. : INSERT : 1个 insert 的话 A >> B , 但 : 100 cols 1次 insert?? 这不常发生啊. : 多个 insert 下... B 可能会比较好, 看index 设计. : 负载,多叫几台机器来档. : 到一定的量之後, 都要用空间换取时间. 预先做好类似的table. : 这样才会快 : 我这边同个event的table可能有100个. 会员资料表也有近百个 : 有7个以上的会员搜寻用的table. : 在7M+ where10个条件下 order 3个col 页面还是可以2sec给出来 基本上你的问题简直是有描述跟没描述一样… 资料库实做是非常非常依需求判定的东西,并不是靠正规/反正规就可以解出来, 你至少要描述(厘清)自己的需求,旁人才有办法帮你想, 而且我觉得你的说明有问题… A: 有100个栏位 但资料有10万笔 B: 20个资料表,每个资料表5个栏位 资料有200万笔 ^^^ 这边应该是 20 个表加起来总和是 200 万吧? -_- 资料表设计,栏位的数量绝对不是唯一考量, 还包括存取频率、存取方式(指 SQL)、栏位性质…等等, 这样说好了,在你的二分题目里,如果 1. 你的 100 栏位的资料表是因为这些资料真的都是榜在一起的, 每次都会需要一起存取,那你应该考虑的是当表养大之後要怎麽处理, 是真的有必要切栏位(增加 SQL 数),或着是切资料(手动转索引)也可以? 2. 如果你的 100 栏位其实存取率高的只有那 40 个, 其余都是在某个特定情况才会用到,那这样榜在一起就显然不合理了, 简单来说,当你切割栏位只会在特定情况增加 SQL 存取数,那就有切割的价值, 不过除非你资料表的量大到百万外加高吞吐,100 栏位其实也还好。 一个重要的资料表的设计绝对有很多要考量的因素在里面,栏位不是唯一, 我前公司 50万+ 会员,资料表数 150+,其中有个站内讯息的表资料量破亿, 这个表栏位数不到 10 栏,但只要几个人同时各删 10 笔资料, 伺服器大概就要花上一两分钟来解,很恐怖吧? 原本的设计者一开始也没想过资料会变这麽大,所以整个就是天然呆的设计… 提供几个资料库设计的小细节(在 MySQL 下), ※ 栏位有分为固定长度和变动长度,两种栏位分开放是有某些好处, 因为变动长度的栏位资料在不断新增过程中是碎裂的, 所以会常需要跑最佳化来维持读取上的效能 ※ 延续上一点,虽然 char 是固定长度格式, 但只要你塞 text 之类的变动长度栏位,char 会自动转为 varchar ※ 如果你弄了很多栏位来放 flag / 只有 Yes,No 的 enum / 只有 0,1 的 char … 建议把相关的「设定栏位」合起来变 bit 运算,PHP 里宣告常数去判定, 相信我,你会习惯的 ※ 新增资料并不会磨损资料表的最佳化(大部分来说),删除和更新才会 ※ 索引只下必要的就好,大量无谓的索引只会令资料在异动时异常辛苦 ※ … 一下想不出来还有什麽了(搔头) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.219.113.121 ※ 编辑: gpmm 来自: 61.219.113.121 (03/15 02:20)
1F:推 mrbigmouth:推全是精华 03/15 04:53
2F:推 mervynW:大推. 03/15 09:53
3F:推 liaosankai:推经验分享 03/15 10:26
4F:推 LaPass:推 03/15 10:28
5F:→ chrisQQ:bit 运算超好用! 03/15 14:08
6F:推 kusoayan:可以解释一下什麽是用 bit 运算吗@@? 03/15 16:05
7F:推 mervynW:我猜是早期mysql没有boolean, 所以用 bit(1) 来代替 03/15 16:31
8F:推 characterlu:受教了,还是声明一下,因为是新手,也许问的问题会让人 03/15 16:33
9F:→ characterlu:觉得不经思考或问错,这我愿意受教,但只是想不想回答是 03/15 16:34
10F:→ characterlu:用是否为作业去思考,那跟态度或内容恐怕就无关了 03/15 16:34
11F:→ mervynW:多个boolean也行 bit(3) ex rwx 03/15 16:35
12F:推 LaPass:我还以为是拿个int当一串bit那种位元运算的技巧 囧" 03/15 16:38
13F:推 mervynW:用 int 所占得空间比较大. bit 你知道的. 03/15 17:04
14F:→ MOONRAKER:c先生得了便宜就不用卖乖了。 03/16 11:25







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灯, 水草

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

TOP