mysql - 存储国家代码+电话的最佳索引选择
问题描述
我有 3 个选择来存储 2 个字段:国家代码 + 电话
a) 国家代码(可以是 1、2 或 3 个字符)
b) 电话(可以是 8-12 位)
这 2 个字段将用于创建 2 字段索引:
- varchar(3) 和 varchar(12)
- char(3) 和 char(12) —— 但是浪费 char(12) 的空间?
- smallint 和 varchar(12)
- smallint 和 char(12) —— 但是浪费 char(12) 的空间?
我应该选择哪一个来提高索引效率?SmallInt + varchar 会减慢索引速度,还是字符串字段应该与字符串字段配对?
感谢任何人可以提供的任何建议。
解决方案
您已经描述了两个非数字字段,每个字段最多可以包含 3 个和 12 个字符。第一个选择似乎是显而易见的选择。
我说这些是非数字字段,因为值的算术和(通常)比较逻辑不会遵循数字规则。对任一值加 1 是没有意义的。
此外,前导零很可能很重要。
如果您使用 ISO 3 个字符的国家/地区代码,那么您知道这些值是 3 个字符,您可以CHAR(3)
使用VARCHAR(3)
. 当然,smallint 也是合适的。
推荐阅读
- android - 无法读取包含 SpannableString 而不是常规字符串的通知
- vba - 使用 Cookie 身份验证和 CSRF 令牌连接到 Web API
- angularjs - 如何使用量角器定位自定义指令中的元素?
- pointers - Golang 中的 *uint 和 uintptr 有什么区别?
- sql - SQL选择列基于左连接后另一列的MIN值
- excel - 粗体 E 列中前 50% 的总和值及其行
- ios - 在 Firebase 实时数据库中存储数据
- javascript - 在 javascript 中传递两个 GET 变量
- kubernetes - 我可以在哪里动手学习 Kubernetes
- vue.js - 如何使另一个vue文件中的抽屉在单击时同步可见