当前位置: 首页 > news >正文

位标志法处理多选字段在数据库中的存储方式 查询效率与扩展性之间的权衡

 一、位标志法

        位标志法(bit flags):把多个选项用一个整数字段(如 INT 或 BIGINT)存储。

位标志法的优点:

  • 存储效率高:只需要一个整数字段(INT 或 BIGINT)。
  • 写入方便:合并多个选项只需要一个整数。
  • 快速判断:用位运算判断是否包含某些选项。
  • 适合固定选项:如权限、状态、角色等。

位标志法的缺点:

不易扩展最多支持 32(INT)或 64(BIGINT)个选项
查询效率低

位运算在大数据量下性能不如索引、

不易维护查询语句不够直观,需要维护映射表
无法统计无法方便地统计某个选项的使用频率
无法外键约束不能建立外键引用关系
不支持动态选项如果选项频繁变动,维护成本高

 使用方法:

// 多选值合并为整数字段
public function add() {$bitMap = [1 => 1,     // 2^02 => 2,     // 2^13 => 4,     // 2^24 => 8,     // 2^35 => 16,    // 2^46 => 32,    // 2^57 => 64,    // 2^68 => 128,   // 2^79 => 256,   // 2^810 => 512,  // 2^911 => 1024, // 2^1012 => 2048, // 2^1113 => 4096, // 2^1214 => 8192, // 2^1315 => 16384, // 2^14];//合并多选值为一个整数字段$typeValue = $this->combineTypes([1, 3, 6], $bitMap);//解析整数字段为原始多选值$parsed = $this->parseTypes($typeValue, $bitMap); // 得到 [1, 3, 6]
}/*** 合并多选值为一个整数字段(用于保存到数据库)* @param array $selected* @param array $bitMap* @return int*/
public function combineTypes(array $selected, array $bitMap): int {$value = 0;foreach ($selected as $typeId) {if (isset($bitMap[$typeId])) {$value |= $bitMap[$typeId]; // 按位或}}return $value;
}/*** 解析整数字段为原始多选值(从数据库读取)* @param int $value* @param array $bitMap* @return array*/
function parseTypes(int $value, array $bitMap): array {$result = [];foreach ($bitMap as $typeId => $bitValue) {if ($value & $bitValue) {$result[] = $typeId;}}return $result;
}
http://www.dtcms.com/a/290696.html

相关文章:

  • https正向代理 GoProxy
  • 苹果最新系统iOS 17的调试和适配方法 - Xcode 14.3.1 真机调试指南
  • How does Misinformation Affect Large Language ModelBehaviors and Preferences?
  • Spring Boot 集成 RabbitMQ:普通队列、延迟队列与死信队列全解析
  • iOS WebView 调试实战 页面跳转失效与历史记录错乱的排查路径
  • 物流链上的智慧觉醒:Deepoc具身智能如何重塑搬运机器人的“空间思维”
  • 达梦数据库JSON_TABLE使用说明
  • grpc: debug: GRPC_TRACE
  • ESP32开发——基于idf框架使用NVS操作存储设备读写
  • 家庭服务具身智能机器人体系架构
  • 一次 POI 版本升级踩坑记录
  • lesson20:Python函数的标注
  • docker nginx 部署前端踩坑记录
  • WinUI3开发_Frame用法
  • MYSQL:数据库约束
  • 【PTA数据结构 | C语言版】拓扑排序
  • 通信刚需小能手,devicenet转PROFINET网关兼容物流分拣自动化
  • 自动化计算机经过加固后有什么好处?
  • OpenAI API(2) OpenAI Responses API使用
  • 设备管理系统(MMS)如何在工厂MOM功能设计和系统落地
  • 深入解析 Linux 硬链接与软链接:原理、区别及应用场景
  • 龙虎榜——20250721
  • Linux中ELF区域与文件偏移量的关系
  • 【AI论文】EXAONE 4.0:融合非推理模式与推理模式的统一大语言模型
  • Neovim 安装与解压 tar.gz 文件
  • AXI接口学习
  • Python 模块未找到?这样解决“ModuleNotFoundError”
  • Dev C++下载安装和使用教程(图文并茂,保姆级教程)
  • dolphinscheduler中sqoop无法执行
  • 机器人工程专业本科阶段的学习分析(腾讯元宝)