2015-12-30 30 views
2

我想知道如何使用電子郵件索引。我意識到這是次優的,最好使用自動遞增的主鍵。但在這種情況下,我正在嘗試開發一個不需要帳戶註冊即可使用的精簡版應用程序。電子郵件地址作爲選擇索引在MySQL中的巨大表查詢速度

SELECT account_id, account_balance, account_payments_received 
FROM accounts 
WHERE account_email = ? 
LIMIT 1 

這個工作正常,目前用戶很少。但是我擔心它什麼時候達到一百萬甚至更多。有什麼方法可以快速索引電子郵件嗎?

我在想也許我可以使用第一個和第二個字符作爲鍵?也許開發一個索引號爲a = 1,b = 2,c = 3等.....

你們建議什麼?

+0

我認爲使用自動遞增字段或主鍵索引會來得更快比較這些。 –

+0

是的,我知道這是最理想的 - 但我不可能爲我的應用程序這麼做 - 用戶不會費心去記住他們的account_id,只有他們的電子郵件 –

+1

什麼是account_email字段的數據類型和長度 –

回答

2

1)你應該保留一個帶有auto_increment的主鍵,因爲它會在與其他表連接時提供效率。

2)將account_email字段保留爲varchar(255)而不是char(255),以便可以返回空閒字節。甚至varchar(100)就足夠了。

3)根據下面的命令在該字段上創建部分索引。

alter table accounts add index idx_account_email(account_email(50)); 

注意:varchar(50)將覆蓋幾乎99%的電子郵件。

+0

是的,我有一個主鍵用於其他內部查詢 - 例如,當用戶查看他們的餘額時,直接從用戶那裏查詢。 –

+0

我注意到我的電子郵件目前設置爲UNIQUE - 您建議我也設置INDEX是否正確? –

+0

是的,我會改變爲varchar(100),這聽起來像一個很好的計劃:) –

1

我想你會發現任何現代數據庫即使在一秒鐘內有一百萬行的表上也能執行這個查詢(特別是如果它不使用LIKE)。只要確保你在列上有一個索引。我也會添加一個自動增量字段,因爲使用整數來獲得一行總是會更簡單快捷。

啥子你所從事的是premature optimisation.

+1

我從事的是過早恐慌發作預防:) –

+1

創建一個表,其中包含100萬個隨機生成的電子郵件地址,並查看您獲得的性能。我的猜測是比你想象的要好。 –

+0

這是相當寬慰的謝謝:) –

相關問題