因此,例如,用戶正在登錄,並且系統正在存儲有關它們的信息,例如:birth date
,因此從會話獲取此信息或查詢數據庫的速度更快?會話是否比查詢數據庫更快?
我的想法是,用戶需要登錄一次,會話總是在那裏,但如果我查詢數據庫,那麼如果用戶重新加載頁面,系統需要反覆查詢,而不是獲取來自臨時「地點」的數據。
我使用PHP和MySQL。
因此,例如,用戶正在登錄,並且系統正在存儲有關它們的信息,例如:birth date
,因此從會話獲取此信息或查詢數據庫的速度更快?會話是否比查詢數據庫更快?
我的想法是,用戶需要登錄一次,會話總是在那裏,但如果我查詢數據庫,那麼如果用戶重新加載頁面,系統需要反覆查詢,而不是獲取來自臨時「地點」的數據。
我使用PHP和MySQL。
對於幾乎所有的語言和數據庫,是的。一個用戶會話通常只存儲在內存中,掌握它只是查看它的問題。數據庫訪問通常涉及一些與不同進程的套接字通信。相比之下,它相當沉重。
據我所知,PHP中的會話默認存儲在文件中,而不是存儲在內存中。對於每個命中,這個會話文件必須從文件系統中讀取並解析到PHP數組中。 你是對的,會話應該更快,但原因是 - 你必須加載用戶的會話數據出於其他原因,他談論的生日將已經存在 - 無需詢問數據庫。 – dwich 2010-07-11 19:11:45
你最近怎麼樣?要做的方法是在登錄頁面檢查用戶憑據,是的,你必須做一個查詢來檢查用戶指定的標準是否與數據庫匹配。如果他們這樣做,則將其存儲在會話中,然後基於該會話繼續。
所以,這不是比較,你必須在登錄頁面查詢數據庫一次,然後使用會話。
登錄頁面
// database query run once only at this page
// if user exits, you store it into session else redirect with an error message
事實上,卡爾的答案是不完全正確,並說: 「MySQL的」 也沒有幫助。
你看,像mysql這樣的數據庫系統有「存儲引擎」。這些通常寫入文件,但有一些寫入內存(MEMORY),其他寫入內存但保留文件備份(MyISAM)和一些寫入/ dev/null(BLACKHOLE)。
因此,一切都取決於存儲引擎:
- 的MyISAM - 默認引擎的MySQL 3。23強大的性能
- 記憶 - 基於哈希,存儲在內存中,可用於臨時表
- 的InnoDB - 支持事務,行級鎖和外鍵
- BerkeleyDB的 - 支持交易和頁級鎖
- BLACKHOLE - 的/ dev/null的存儲引擎(什麼,你寫它消失)
- 實例 - 實例存儲引擎
- 存檔 - 歸檔存儲引擎
- CSV - CSV存儲引擎
- NDBCLUSTER - 羣集,容錯,基於存儲器的表
- FEDERATED - 聯合MySQL存儲引擎
- MRG_MYISAM - 等同的MyISAM表集
- ISAM - 過時存儲引擎
(列表從PhpMyAdmin Egines列表)
你使用什麼編程語言和dbms? – 2010-07-11 18:53:04
我編輯了我的答案。 – Adam 2010-07-11 18:54:31