首先,當你在varchar字段上有索引時,mysql不會在所有條目上執行strcmp
以查找正確的;而是使用binary tree,這比strcmp
要快很多,以便找到正確的條目。
注意:如果需要,我會提供一些提高性能的信息,但請不要這樣做,直到您遇到實際問題。 Varchar索引很快,它們已經被很多非常聰明的人所優化,並且在絕大多數情況下,它會超出您的需要。這就是說,如果你有很多條目和/或非常長的鍵,那麼在它上面使用散列索引可能是一個不錯的性能。
CREATE TABLE users
(
username varchar not null,
username_hashed varchar(32) not null,
primary key (username),
index (username_hashed)
);
例如,當您插入時,您可以設置username_hashed = md5(username)
。然後你用類似select otherfields from users where username_hashed = md5(username) and username = username
這樣的東西搜索請注意,它似乎mysql 5.5 support hash index natively,這將允許你不必手動做。
你不會以一己之力智取一個代碼庫,擁有數百萬線和數百觀察員。讓MySQL做它的事情。 –
在這裏閱讀http://stackoverflow.com/questions/517579/strings-as-primary-keys-in-sql-database – Yogus