mysql索引问题

时间:2011-06-22 16:42:07

标签: mysql indexing

我有一个关于索引的“最佳实践”问题。

我必须索引电话号码,我通常会将column格式化为整数。我可以将数字分成多个列:areacode,suffix,prefix,country code。但由于我必须考虑国际号码,并且某些国家的数字有点搞笑,我更愿意保留一栏。

所以我的问题是,我应该保留为整数,字符还是varchars保存的列数据? 我删除任何非int相关的东西,因此可能不需要varchar。

我必须为我的客户提供搜索能力,因此我需要索引该号码。 如果所有的电话号码都是来自美国,那么我会把这些专栏分开,但我也会为国际提供服务。

所以我很好奇索引部分,以及其他人在这个领域的做法。

是否最好用整数(对于这样的东西)进行索引,或者甚至是重要的。

作为旁注,电话号码的长度不会相同。这就是我要求在char或varchar中格式化列结构的原因。

谢谢你们!

2 个答案:

答案 0 :(得分:2)

预计这张桌有多大?我问的原因是,明显的是,整体上的指数会变小,但在一张小桌子上,这不是主要的考虑因素。使用varchar可以让你更灵活地执行诸如“...等''等',如同'更大的索引'这样的话。如果表格非常大,而且它运行的盒子在所有内存中 - 受限制,您可以遇到索引不适合内存的情况,将针对该索引的查询发送到交换地狱。这可能会因您选择的存储引擎而加剧:InnoDB使用主键为每个索引添加前缀,例如,如果您的PK在广泛的字段或字段上,这会使您的索引膨胀。

答案 1 :(得分:1)

电话号码可以包含#和*,因此我建议不要使用整数 此外,国际前缀为+,这是为了支持国际前缀,无论您身在何处。

e.g。在南非,您需要在国家/地区代码前添加09;在欧洲,前缀是00 为了使数字在任何地方都能正常工作,您可以用+替换国际前缀,并且您的手机将替换为本地前缀拨打国外。

我会使用varchar作为电话号码。

此外,我使用整数auto_increment作为主键,并使用电话号码作为辅助键,以保持InnoDB snappy的性能。
还要记住,人们可以“分享”一个电话号码,所以不能保证是唯一的。