gpt4 book ai didi

MySQL性能: store Boolean values (flags) in one row as an aggregated number or not?

转载 作者:行者123 更新时间:2023-11-29 07:51:07 25 4
gpt4 key购买 nike

MySQL 表 mytable结构为:

Name - param1 - param2 - param3 - param4 - param5 - ... - param20.

param<number>具有 boolean 类型 ( TINYINT(1) )

假设我想执行一个查询:

SELECT Name FROM mytable WHERE param4=1 AND param7=1;

一切都按预期进行。

如果我对性能感到好奇,那么可以使用聚合列 params而不是param1, param2, ... param20

为此,我会将所有 boolean 参数存储为一个整数。

例如,72 = 64+8 = 0+0*2+0*4+1*8+0*16+0*32+1*64+0+...+0会对应 param4=trueparam7=true ,其他所有都是 false 。这很容易。

但是,这是否会显着影响 Select 查询提取与上述查询相同的行的性能?我相信查询将是

SELECT Name FROM mytable WHERE (params % 16 = 8) AND (params % 128 = 64);

我认为聚合值(结果只有两列)更好,但是性能怎么样?

有什么陷阱吗?

谢谢。

最佳答案

当然,位操作的一个问题是,如果在将来的某个时刻您的数据库将从对这些值建立索引中受益,那么您就会陷入困境。

除非你有真正令人信服的理由不这样做,否则我会说使用单独的字段。该数据库旨在跟踪不同的信息 - 我们不应该试图用另一种方法来打动它 - 它针对跟踪不同列中的不同信息进行了优化。

关于MySQL性能: store Boolean values (flags) in one row as an aggregated number or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26401300/

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