首页 > 解决方案 > 存储国家代码+电话的最佳索引选择

问题描述

我有 3 个选择来存储 2 个字段:国家代码 + 电话

a) 国家代码(可以是 1、2 或 3 个字符)

b) 电话(可以是 8-12 位)

这 2 个字段将用于创建 2 字段索引:

  1. varchar(3) 和 varchar(12)
  2. char(3) 和 char(12) —— 但是浪费 char(12) 的空间?
  3. smallint 和 varchar(12)
  4. smallint 和 char(12) —— 但是浪费 char(12) 的空间?

我应该选择哪一个来提高索引效率?SmallInt + varchar 会减慢索引速度,还是字符串字段应该与字符串字段配对?

感谢任何人可以提供的任何建议。

标签: mysqlsql

解决方案


您已经描述了两个非数字字段,每个字段最多可以包含 3 个和 12 个字符。第一个选择似乎是显而易见的选择。

我说这些是非数字字段,因为值的算术和(通常)比较逻辑不会遵循数字规则。对任一值加 1 是没有意义的。

此外,前导零很可能很重要。

如果您使用 ISO 3 个字符的国家/地区代码,那么您知道这些值是 3 个字符,您可以CHAR(3)使用VARCHAR(3). 当然,smallint 也是合适的。


推荐阅读