做游戏要存储用户经过城市列表,我想用varchar类型存,大自然提出用比特存信息的好办法,这样一来,我比原来就减少了至少一半的mysql网络请求开销,同时也让mysql的空间节省了许多。 比如,我要标记第三个城市的为已经访问过,我更新bit数据的SQL语句是这样
做游戏要存储用户经过城市列表,我想用varchar类型存,大自然提出用比特存信息的好办法,这样一来,我比原来就减少了至少一半的mysql网络请求开销,同时也让mysql的空间节省了许多。
比如,我要标记第三个城市的为已经访问过,我更新bit数据的SQL语句是这样的(用到了位操作的与、或、移位):
UPDATE `characters` SET `visited_cities` = visited_cities | (1<<2) WHERE `characters`.`id` = 1 AND (visited_cities & (1<<2)) = 0;
从cities表找到对应的city:
SELECT t1.* from cities as t1, characters as t2 where (1<<(t1.id-1))&t2.visited_cities!=0
真是很方便。
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务