将字符串转换为INTEGER以进行mysql查询更好

时间:2015-08-03 00:38:10

标签: php mysql

说明:

我需要在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万行。

问题:

  1. 性能是否足以索引表(联合索引string1和string2)?

  2. MySQL搜索性能是否更好如果我根据字符将这些varchar(64)字符串转换为大整数? (我当时认为长度会更大,但是搜索会更整齐,更好;

  3. 如果转换它们更好,我应该使用哪种算法进行转换,以便string1保留Unique

  4. 有更好的想法吗?

2 个答案:

答案 0 :(得分:3)

这听起来像是一个不成熟的优化。

如果您的首选数据类型为varchar(64)varchar(35),请从这些数据类型开始。对于大多数用途,(string1, string2)上的索引应该足够了。

将字符串存储为char(64)(也许char(35))的想法是个好主意。但是,这要求所有字符串的长度相同。你可以也开始玩binary。这样做的优点是比较需要考虑字符编码和排序。

另一种可能性是考虑哈希索引/自适应哈希索引而不是b树索引。使用哈希索引的比较应该更快;但是,它们比b树索引更受限制。

但是,我的猜测是两列上的简单索引就足够了,并且可以在其他方面花费性能提升。

答案 1 :(得分:1)

您可以使用string1和string2创建组合索引。