作者wawawa (哇哇哇○( ̄﹏ ̄)○)
看板PHP
标题Re: [请益] MySQL执行效率一问
时间Fri Oct 14 18:55:20 2005
※ 引述《KennyL (Giant Heart)》之铭言:
: ※ 引述《wawawa (哇哇哇○( ̄﹏ ̄)○)》之铭言:
: : 若是有适当正规化,应该一个步骤就可以把资料提取出来。
: : 当然,请记得相关栏位加上索引,速度才会快。以下是小弟的建议:
: : 1.正规化,将作者那一栏抽出成一个独立资料表
: 嗯嗯~诚如w大所说, 将资料取出并正规化的确是最好的方式.
: 但目前系统的设计, 是可以让使用者在一个资料表的结构下自行upload资料,
: 再由系统去分析使用者在这一次上传资料中的内容.
: 也就是说, 我只是提供一个壳, 让user自己放资料进来.
: 所以独立出来的资料表, 内容也还是会每次不同.
: 所以我的迷思就在这了, 同样都是要重新insert资料, 也同样都有建立栏位索引,
: 唯一的差别在於先建立资料表, 或是在程式里执行新增资料表,
: 这两种方式在效能上会不会有很大的差别呢?
效能上的差别,会随着你的资料量的增加而拉大。
所以若是你的资料量很大、使用者存取又很频繁,那真的要设法改善这一部分的效能,
否则存取的速度、系统负载应该都会有着相当的影响。
既然你说你是提供一个壳让使用者输入资料,
比如你设计了一个页面,让使用者可以在这个页面一次把所有的资料输入(书籍名称、
作者等),那还不如改成这样:
第一个页面指出现书籍名称、ISBN号码...等单一资料的栏位让使用者输入,
输入完毕後使用者按下一步;
第二个页面让使用者下拉选择有几位作者,搭配javascript动态产生作者数量的
文字输入栏位。如此一来第二个页面的资料(作者),就可以使用php去解析,存到
独立的作者资料表。如此一来不也是可以达成你的"提供使用者输入的壳"的需求?:)
当然,若是架构以然定型,不宜去更动的话,
那就设法使用我前面所提的第二种方法,这里配合你的需求修改如下:
1.在启动MySQL时,新增一个HEAP型态的资料表:
CREATE TABLE xxx (...) TYPE=HEAP;
2.每次排序完,资料以全部送到前端後,清空资料表:
TRUNCATE TABLE xxx;
省去建立暂存资料表以及删除的动作,效能会比较理想。
不过这时可能就要注意一下系统分配给MySQL daemon的记忆体配置以及
相关议题。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.16.1.95