我需要存储提供商名称以及他们能够提供服务的国家/地区。有92个县。而不是存储多达92行,我想存储2 ^ 91,所以如果它们只提供在1和2县,我会存储3。
我遇到的问题是最大的数字是2475880078570760549798248448
,这对于最大的BigInt来说太大了。
在过去,当我的选项数量较少时,我已经能够做到......
SELECT * FROM tblWhatever WHERE my_col & 2;
如果my_col存储了2,3,6等(第2位的任何内容),则会找到它。
我想我不确定两件事......如何存储以及如何以非INT方式存储的方式进行查询。
答案 0 :(得分:1)
您可以使用BINARY(13)
作为数据类型来存储最多94位。但MySQL按位运算符仅支持64位的BIGINT
。
因此,如果您想使用按位运算符,则必须将您的县位域存储在两个BIGINT
列中(或者可能只有一个BIGINT
和一个INT
),并且在应用程序中代码可以找出要搜索的两列中的哪一列。这似乎很尴尬。
但是,我会指出一个性能考虑因素:使用按位运算符进行搜索效率不高。您无法使用索引进行搜索,因此每个查询都被强制执行表扫描。随着数据的增长,这将变得越来越昂贵。
与使用LIKE '%word%'
搜索子字符串或搜索当月某一天的所有日期相同的问题。
所以我建议将每个县存放在一个单独的行中。您不必为每个服务提供商存储92行 - 您只需存储与其服务的县数相同的行数。没有一行表示该县没有服务。