首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql索引问题

mysql索引问题
EN

Stack Overflow用户
提问于 2011-06-23 00:42:07
回答 2查看 86关注 0票数 2

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

我必须为电话号码编制索引,通常会将column格式化为整数。我可以将号码分成多列:区号、后缀、前缀、国家代码。但由于我必须考虑国际数字,而这些数字在某些国家会变得有点滑稽,所以我更喜欢保留一个专栏。

所以我的问题是,我应该将列数据保存为整数、字符或varchars吗?我确实去掉了所有与int无关的东西,所以varchar可能不是必需的。

我必须为我的客户提供搜索能力,因此我需要索引数字。如果所有的电话号码都来自美国,那么我会分开列,但我也是为了迎合国际电话号码。

所以我很好奇索引部分,以及其他人在这个领域的实践。使用整数索引是最好的吗(就像这样),或者这有什么关系吗?

顺便说一句,电话号码的长度不会完全相同。这就是为什么我会问关于在char或varchar中格式化列结构的原因。

谢谢你们!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-23 01:15:42

预计该表有多大?我问的原因是int上的索引显然会更小,但对于一个小的表来说,这不是一个主要的考虑因素。使用InnoDB给你更多的灵活性来做像"...WHERE电话号码像'415%‘这样的事情,以更大的索引为代价。如果表很大,并且它运行的机器完全是内存受限的,你可能会遇到索引无法装入内存的情况,将对该索引的查询发送到交换地狱。这可能会因为你选择的存储引擎而加剧:InnoDB会在每个索引前面加上主键,例如,如果你的PK在一个或多个宽的字段上,这可能会膨胀你的索引。

票数 2
EN

Stack Overflow用户

发布于 2011-06-23 01:22:47

电话号码可以包含#和*,所以我建议不要使用整数。

此外,国际前缀是+,这是为了支持国际前缀,无论您所在的国家。

例如,在南非,你需要在国家代码前加上09前缀;在欧洲,这个前缀是00

为了让号码在任何地方都能正常工作,你可以用+替换国际前缀,而你的手机也会用本地前缀来替换这个前缀。

我会用varchar来表示电话号码。

此外,为了保持InnoDB的性能,我使用整数auto_increment作为主键,使用电话号码作为辅助键。

还要记住,人们可以“共享”一个电话号码,所以不能保证它是唯一的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6443438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档