2011-07-21 86 views
0

我是SQL新手,我正在製作一個存儲多人遊戲帳戶信息的表格。我想知道什麼是存儲大量數據的最有效方式。推薦的SQL類型和長度

對於這三根柱子,我想,我已經想通了:

username: VARCHAR(20) 
password: VARBINARY(16) for MD5-Hashes 
email: VARCHAR(70) 

你覺得這個怎麼樣?

除此之外,還會有很多更靈活的數據(遊戲存檔數據),這是我無法預測的。將這些數據作爲XML數據保存在TEXT類型的字段中是否明智?還是有更好的方式來保存它(使用PHP)?

謝謝。 羅布

+0

對於VARCHAR,大部分數據塊使用所需數量的字符加上長度。有些數據庫如果長度小於255,則使用單個字節。因此,指定較小的長度不會購買任何內容(除非您希望*強制執行此長度)。對於密碼,你應該使用二進制,因爲它的長度不會改變。 – maaartinus

+0

應該禁止提及XML和標籤空間效率。如果您不想將數據結構化爲多個表格並關心空間,那麼您應該使用更少的浪費,例如[JSON](http://www.json.org)。 – maaartinus

回答

0

一對夫婦建議的:

  • 儘可能經常地,使用盡可能小的類型(如TINYINT而不是僅僅INT)
  • 如果你有一個fixen長度的字符串,用一個字符,而不是一個varchar(您MD5,例如)

的說明更符合您的具體情況:

  • 70個字符似乎有點短的電子郵件地址
  • Savegame data>我可能會使用TEXT或BLOB字段。
+0

TEXT和BLOB有什麼區別? –

+0

文本用於文本數據; blob用於二進制數據 –

0

不要在文本字段中存儲xml。使用不同的數據庫引擎 - 可讓您存儲任意非結構化數據。 (查找nosql)

+0

嗯。我不認爲我的提供者給我這個選擇。但我會問。 –

0

我同意,當您包含域名時,電子郵件地址的長度太短。您可能想要了解Gmail的最大長度。

另外,將遊戲數據保存爲文件並將路徑保存到數據庫中可能會更好。在桌面上放大數據總是一個壞主意。

當您在使用聚簇索引的mySQL innoDB存儲引擎中使用索引並且行內容存儲在索引中時,尤其如此。該指數將變得非常大並且效率低下。

還查詢涉及SELECT/INSERT/UPDATE將變得非常慢,以及,尤其是後者2.

+0

感謝您使用電子郵件長度的提示。問題是我需要在很短的響應時間內訪問部分數據,而且經常需要訪問這些數據。所以我不認爲將它作爲一個文件保存是件好事。 –