我需要在MySQL数据库表中对64个字符Strings
(varchar 64)进行大量搜索。这可能发生在每次1000次的while / for循环中(每次obv不同的字符串):
示例:
// Every 2 hours:
for($i=1;$i<1000;$i++){...
SELECT id FROM table WHERE string1='$string1' AND string2='$string2'
string1列是
unique
varchar(64),string2是not unique
varchar(35)
随着时间的推移,这个InnoDB表可能有1-10万行。
性能是否足以索引表(联合索引string1和string2)?
MySQL搜索性能是否更好如果我根据字符将这些varchar(64)字符串转换为大整数? (我当时认为长度会更大,但是搜索会更整齐,更好;
如果转换它们更好,我应该使用哪种算法进行转换,以便string1
保留Unique
?
有更好的想法吗?
答案 0 :(得分:3)
这听起来像是一个不成熟的优化。
如果您的首选数据类型为varchar(64)
和varchar(35)
,请从这些数据类型开始。对于大多数用途,(string1, string2)
上的索引应该足够了。
将字符串存储为char(64)
(也许char(35)
)的想法是个好主意。但是,这要求所有字符串的长度相同。你可以也开始玩binary
。这样做的优点是比较不需要考虑字符编码和排序。
另一种可能性是考虑哈希索引/自适应哈希索引而不是b树索引。使用哈希索引的比较应该更快;但是,它们比b树索引更受限制。
但是,我的猜测是两列上的简单索引就足够了,并且可以在其他方面花费性能提升。
答案 1 :(得分:1)
您可以使用string1和string2创建组合索引。