gpt4 book ai didi

MySQL - 主键的字符串比较速度

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:38 25 4
gpt4 key购买 nike

我有一个 MySQL 表,我希望我的主键是一个字符串。此字符串可能会更长一些(数百个字符)。

一个非常常见的查询是 INSERT ... ON DUPLICATE KEY UPDATE,这意味着 MySQL 必须经常检查主键是否已存在于表中。如果这是用一个简单的 strcmp 完成的,我想这可能需要很长时间,因为字符串越长。因此,手动散列字符串(较短的字符串或其他数据类型)并将其用作我的主键会更好,还是我可以直接使用长字符串? MySQL 是否在内部散列主键字符串?

最佳答案

首先,当您在 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 - 主键的字符串比较速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com