已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

mysql什么分表?以及我什么知道该去哪个表取数据?


『回复列表(157|隐藏机器人聊天)』

20.

@大尨,为什么难受,你在找到表的名称后不就可以去查询了吗,只是变成


Db::table('ulogs'.(crc32("$uid;$type;$wxid") % $表的数量))->where('uid',$uid)->where('type',$type)->where('wxid',$wxid)->first();

而已,哪里难受?

(/@Ta/2022-06-25 23:23//)

21. @老虎会游泳,查询数据的时候很会忽略 $type;$wxid 这样的话还得设置用户必须选择 type 跟 wxid 来查询,用户可能不来这一套,他大多数只会一个列表界面显示。
(/@Ta/2022-06-25 23:27//)

22.

@大尨,如果你有执行where uid=?的需求,那可以这样分表:

Db::table('ulogs'.($uid % $表的数量))->where('uid',$uid)->get();

Db::table('ulogs'.($uid % $表的数量))->where('uid',$uid)->where('type',$type)->where('wxid',$wxid)->first();
(/@Ta/2022-06-25 23:29//)

23.

@大尨,选择始终会存在的那个查询条件作为分表参数。

如果参数是字符串,或者不连续的整数,可以考虑套一层crc32()来让分配更均匀。

Db::table('ulogs'.(crc32($uid) % $表的数量))->where('uid',$uid)->get();

Db::table('ulogs'.(crc32($uid) % $表的数量))->where('uid',$uid)->where('type',$type)->where('wxid',$wxid)->first();
(/@Ta/2022-06-25 23:33//)

24. @老虎会游泳,好像可以这样试试看看。
(/@Ta/2022-06-25 23:34//)

25.

@大尨,MySQL也能算CRC32和取模,所以数据的初始导入工作可以交给MySQL来做。

INSERT INTO ulogs0 SELECT ulogs WHERE CRC32(uid) % 10 = 0;
INSERT INTO ulogs1 SELECT ulogs WHERE CRC32(uid) % 10 = 1;
...

以后如果要改散列函数,也能用上述方法批量转移数据。


Screenshot_20220625_234228_com.UCMobile.jpg

(/@Ta/2022-06-25 23:46//)

26. @老虎会游泳,好的
(/@Ta/2022-06-25 23:48//)

27.

@大尨,更正:PHP中,负数取模的值为负数。只有python中负数取模才得到正数。

不过,在64位系统中所有crc32()的结果都将是正整数,所以应该不成问题。MySQL的CRC32函数应该也不会返回负值。

(/@Ta/2022-06-26 00:01//)

28.

套CRC32让数据分布更均匀的例子:

Screenshot_20220626_000330_com.UCMobile.jpg


不套CRC,数据就变得不太均匀了,因为虎绿林的偶数uid比奇数多很多(当时开了数据库主从同步,id自增为2)。为什么套ABS,因为虎绿林有负数UID(@所有人),MySQL负数取模也为负。

Screenshot_20220626_000448_com.UCMobile.jpg

(/@Ta/2022-06-26 00:07//)

29.

@大尨@老虎会游泳,数据库新手,不懂想请教:

对于B表:

如果不分表,性能会急剧下降吗?

只是因为B+树层数多一层?(即,每次查询随机读两次硬盘(假设索引的B+树层数也多一层))

(/@Ta/2022-06-26 09:16//)

30. @无名啊,数据到300w查询效果下降就比较明显了。所以表是要分的。
(/@Ta/2022-06-26 19:07//)

31. 1656241745670.jpg
(/@Ta/2022-06-26 19:10//)

32.

@大尨,好奇B表extend字段平均长度有多少。。1KB?

wxidappid呢?各20字节?

(/@Ta/2022-06-26 22:07//)

33. @无名啊,wxid和appid都是 varchar(32) extend 是  text 
(/@Ta/2022-06-26 22:10//)

35. @无名啊这个类型不是看数据随便设置的吗?还需要注意这些细节?
(/@Ta/2022-06-26 22:12//)

36.

@大尨,实际平均占用空间呢?

才300W就卡了,感觉至少extend很长

(/@Ta/2022-06-26 22:12//)

37. @无名啊,不长,实际都不到4096的长度,只是为了方便直接 text类型
(/@Ta/2022-06-26 22:13//)

38. @无名啊,因为这个搜索频率挺大的。不断的搜
(/@Ta/2022-06-26 22:14//)

39.

@大尨@老虎会游泳,你们会去了解这种东西吗?

一个查询大概会随机读几次硬盘?

如果不是,那计算什么东西来大致了解“这个查询性能如何”?

(/@Ta/2022-06-26 22:52//)

40.

@无名啊,计时啊,结束时间-开始时间。

(/@Ta/2022-06-26 22:56//)

下一页 上一页 2/8页,共157楼

回复需要登录

6月30日 10:59 星期一

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1