gpt4 book ai didi

整数位的Mysql索引

转载 作者:行者123 更新时间:2023-11-29 04:41:04 26 4
gpt4 key购买 nike

我有一个像这样的 mysql:

id (UNSIGNED INT) PrimaryKey AutoIncrement
name (VARCHAR(10)
status UNSINGED INT Indexed

我使用状态列来表示 32 种不同的状态,例如:

0 -> open
1 -> deleted
...
31 -> something

这样使用起来很方便,因为我不知道我有多少个状态(现在我们支持 32 个状态,我们可以使用一个 long int 来支持 64 个,如果超过 64 个(我们不太可能看到:))

这种方法的问题是没有索引位级别 -> 选择位设置位置的查询很慢。

我可以使用范围查询改进一点 -> where status between n1 and n2 。

这仍然不是一个好方法。

我想指出的是,我只想在设置了 32 位中的几个位(比如位 0、12、13、21、31)时进行搜索。

有什么提高性能的想法吗?

最佳答案

如果出于某种原因您无法按照 RandomSeed 在上一个答案中的建议对数据进行规范化,我很确定您可以在该字段上放置一个索引并使用 int 值(即 2^n)进行搜索。

例如,如果您需要设置位 0、12 和 13,请搜索 status = 2^0 + 2^12 + 2^13。

编辑:如果您需要搜索这些位的设置位置,而不考虑其他位,您可以尝试使用按位运算符,例如对于位 0、12 和 13,搜索其中 status & 1 = 1 and status & 4096 = 4096 and status & 8192 = 8192

然而,与范围查询相比,我不确定性能会提高多少(如果有的话)。因此,如前所述,规范化可能是唯一的解决方案。

关于整数位的Mysql索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28300072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com