作者roga (任性)
看板PHP
标题Re: [请益] 读写资料方式比较
时间Sun Apr 24 14:09:28 2011
※ 引述《newbiegg (威尔)》之铭言:
: 假设有一个简单的 Table 只有两个栏位: ID (unique), Date
: (当他是一堆会员的最後上站日好了)
: 程式常常需要去修改 Date 的值
: 请问 php 对 MySql 读写时,以下方案:
: A. 每次不管是要"新增"或是"更新",都直接用以下方式刷新
: 1. DELETE FROM TABLE WHERE ID = 'xx'
: 2. INSERT INTO TABLE
: B. 每次都做以下判断
: 1. 先 SELECT FROM TABLE 检查,如果 ID 尚未存在(第一次上站) --> INSERT
: 2. 如果 ID 已经存在一笔资料 --> UPDATE TABLE
: 以上两种处理方式何者较佳?
如果是储存「会员最後上站日」,表示您的这两个栏位都不是 AUTO_INCREMENT
栏位。假设有 transaction 的话,两种差不多,如果没有 transaction 的话,我
会比较偏好第二种方法,但还是会尽量写在一个 SQL Statement 里面来解决。
您的第二种方法比较不会有遇到 DUPLICATE KEY 塞不进去的风险 (虽然对一般
会员系统来说这种风险其实并不算高)
: 假设资料量变得非常巨大,效能比较上又是如何?
因为您用 MySQL ,所以建议您可以参考一下 MySQL 的特异功能 INSERT ON
DUPLICATE KEY UPDATE 的方法:
INSERT INTO TABLE (ID) VALUES ('xx')
ON DUPLICATE KEY UPDATE ID = 'xx';
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
至於资料量变得非常巨大,要看您对「巨大的定义」是有多大,假设以您的 case
是存会员资料,上述方法应该够用了。因为您的会员总不会有几千万人吧... :P
--
The Internet: where men are men, women are men, and children are FBI agents.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.220.104.63
1F:推 arrack:好方式 04/24 14:14
※ 编辑: roga 来自: 61.220.104.63 (04/24 14:29)
2F:推 s861175:推MYSQL特异功能 04/24 23:49