1

我需要存储提供者名称和他们能够提供服务的国家/地区。有 92 个县。我不想存储多达 92 行,而是存储 2^91,所以如果它们仅在 1 和 2 县提供,我会存储 3。

我遇到的问题是最大的数字是2475880078570760549798248448,这对于最大的 BigInt 来说太大了。

在过去,当我的选择数量较少时,我能够做类似的事情......

SELECT * FROM tblWhatever WHERE my_col & 2;

如果 my_col 存储了 2、3、6 等(任何带有位 2 的内容),它将被找到。

我想我不确定两件事......如何存储以及如何查询是否以 INT 以外的方式存储。

4

1 回答 1

1

您可以BINARY(13)用作存储最多 94 位的数据类型。但是 MySQL 位运算符只支持BIGINT64 位。

因此,如果您想使用按位运算符,则必须将您的县位域存储在两BIGINT列(或者可能是一列BIGINT和一列INT)中,并在应用程序代码中确定要搜索的两列中的哪一列。这似乎很尴尬。

但是,我要指出一个性能考虑:使用按位运算符进行搜索不是很有效。您不能使用索引进行搜索,因此每个查询都被迫执行表扫描。随着数据的增长,这将变得越来越昂贵。

LIKE '%word%'这与使用 搜索子字符串或使用一个月中的给定日期搜索所有日期相同的问题。

所以我建议毕竟将每个县存储在单独的行中。您不必为每个服务提供商存储 92 行 - 您只需存储与他们服务的县的数量一样多的行。没有一行表示该县没有服务。

于 2013-01-02T20:37:24.613 回答