作者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
推 arrack:好方式 04/24 14:14
※ 編輯: roga 來自: 61.220.104.63 (04/24 14:29)
推 s861175:推MYSQL特異功能 04/24 23:49