我有一个关于索引的“最佳实践”问题。
我必须为电话号码编制索引,通常会将column格式化为整数。我可以将号码分成多列:区号、后缀、前缀、国家代码。但由于我必须考虑国际数字,而这些数字在某些国家会变得有点滑稽,所以我更喜欢保留一个专栏。
所以我的问题是,我应该将列数据保存为整数、字符或varchars吗?我确实去掉了所有与int无关的东西,所以varchar可能不是必需的。
我必须为我的客户提供搜索能力,因此我需要索引数字。如果所有的电话号码都来自美国,那么我会分开列,但我也是为了迎合国际电话号码。
所以我很好奇索引部分,以及其他人在这个领域的实践。使用整数索引是最好的吗(就像这样),或者这有什么关系吗?
顺便说一句,电话号码的长度不会完全相同。这就是为什么我会问关于在char或varchar中格式化列结构的原因。
谢谢你们!!
发布于 2011-06-23 01:15:42
预计该表有多大?我问的原因是int上的索引显然会更小,但对于一个小的表来说,这不是一个主要的考虑因素。使用InnoDB给你更多的灵活性来做像"...WHERE电话号码像'415%‘这样的事情,以更大的索引为代价。如果表很大,并且它运行的机器完全是内存受限的,你可能会遇到索引无法装入内存的情况,将对该索引的查询发送到交换地狱。这可能会因为你选择的存储引擎而加剧:InnoDB会在每个索引前面加上主键,例如,如果你的PK在一个或多个宽的字段上,这可能会膨胀你的索引。
发布于 2011-06-23 01:22:47
电话号码可以包含#和*,所以我建议不要使用整数。
此外,国际前缀是+,这是为了支持国际前缀,无论您所在的国家。
例如,在南非,你需要在国家代码前加上09前缀;在欧洲,这个前缀是00。
为了让号码在任何地方都能正常工作,你可以用+替换国际前缀,而你的手机也会用本地前缀来替换这个前缀。
我会用varchar来表示电话号码。
此外,为了保持InnoDB的性能,我使用整数auto_increment作为主键,使用电话号码作为辅助键。
还要记住,人们可以“共享”一个电话号码,所以不能保证它是唯一的。
https://stackoverflow.com/questions/6443438
复制相似问题