2010-01-05 35 views
2

我最近被告知我應該在我的應用程序中使用事務,因爲它們可以幫助更快地運行代碼並防止在整個頁面加載之前執行MySQL代碼(例如,如果有人只是刷新我的頁面而整個頁面沒有負載,沒有MySQL的電話會啓動,它會減少服務器上的負載。)如果使用MySQL Transactions,我必須考慮哪些差異?

我想知道如果我想切換我的網站到事務處理,這將是多困難,我會做出什麼樣的改變?

另外,我使用的PDO,而不是mysql_*,如果那樣有什麼區別?

+0

代碼運行速度更快嗎?從何時起? – 2010-01-05 00:19:36

+1

小心這個人從這裏告訴你什麼。 =) – 2010-01-05 00:36:29

+0

雅。不要相信這個人告訴你了。這是不正確的。 – 2010-01-05 00:53:05

回答

4

交易,在Web應用程序,一般用於AtomicityIsolation


他們不「防止MySQL代碼從整個頁面加載之前執行」:當你調用mysql_query(或任何同等使用PDO或mysqli_*的MySQL查詢仍在執行。但是如果你不承諾交易,他們將全部被「取消」。

他們也沒有那麼多幫助「運行代碼更快」;即使他們有時有效果,那只是因爲,如果你不明確地使用事務的一組查詢(導致只有一個交易)的,MySQL會暗中使用的一個交易,每個查詢(導致數交易,這可能把一些其它附加負載DB服務器上)

注:

    當然
  • ,這是使用支持事務的數據庫引擎 - 像InnoDB的。
  • 對於「更快」的觀點,我已經看過幾次了;但是在特殊情況下,我需要的速度超過了ACID--或者這只是服務器負載的問題(這意味着如果您想要沿着這條路走下去,就必須進行配置,以瞭解速度更快!您的具體情況)


使用PDO,mysql_*,或mysqli_*應該不會有太大不同,這裏的 - 即使它建議不要使用mysql_*(舊,並且不支持一些MySQL> = 4.1的特性,如預準備語句)

+0

是的,我正在使用PDO,我只是想確保很多人仍然使用'mysql_ *' – 2010-01-05 01:17:56

0

交易提供ACID,不會讓你的「代碼更快」。

如果有的話,他們會讓它變慢。我建議你在跳到這樣一個結論之前做更多的交易研究。

1

其實,當你使用RDBMS你使用的交易已經。然而,除非你是明確的關於事務開始和結束的時間,你隱式允許每個SQL語句啓動和完成一個單獨的事務。這也被稱爲「自動提交」。「

事務是通過多個SQL語句創建邏輯變更集合的好工具,因此您可以將整組變更作爲一個單元提交或回滾,並確保您的更改使數據庫保持一致狀態。主要目的不在於提高性能

開始和結束任何事務都有一個小的開銷,如果你使用隱式事務進行大量修改,會導致每個語句的開銷,這會被放大。運行數千個INSERT語句來執行批量數據加載,每個INSERT隱含在單獨的事務中。在其他情況下,使用事務與不使用事務答案是微不足道的,尤其是像PHP這樣的語言,它具有「無共享」架構。

0

我不知道MySQL的事務處理速度,但在SQLite中使用事務通常更快,但我相信在MySQL中它們會讓你放慢速度。

關於你需要做,也改變......幾乎沒有:

BEGIN TRANSACTION 
$result = [execution of several queries] 
if $result fails -> ROLLBACK, else COMMIT 

我也建議你使用PDO在庫MySQLi或MySQL。

+0

mysqlnd不是php的擴展。 – 2010-01-05 01:03:51

+0

@Alex:你說得對,我修好了。 – 2010-01-05 01:20:08

相關問題