1
season8 2019-05-05 13:33:10 +08:00
感觉业务挺简单啊,也没说大量数据的问题:
首先,file_match 表的 uid 需要设置索引 然后,直接关联查询,都不用考虑效率问题 |
2
xivisi OP @season8
为了说明问题,目前是将业务是简化的。理论上来说,随着上线时间、用户数增加,file_match 表的增长将会远超 file_path,使用 join 语句,是否会导致性能问题? |
3
xivisi OP @season8 比如我写一条这样的查询语句:
SELECT file_match.uid uid, file_path.hash hash, file_path.path path FROM file_match JOIN file_path ON file_path.id=file_match.fid WHERE hash='A7FCFC6B5269BDCCE571798D618EA219A68B96CB87A0E21080C2E758D23E4CE9' AND file_match.uid=12345; 总感觉当表大了之后,查询效率会很低 |
4
season8 2019-05-05 14:38:44 +08:00
@xivisi 应该不存在
1. file_path 表可以说是根据 unique key 查询的,很快,量也不大 2. file_match 虽然量累计起来大,但 uid 有索引,根据 uid 过滤到的记录时很少的,所以也可以用 子查询 in 来实现,除非这个表中某几个用户的上传量超过了 1/5(我在 mysql 中发现数据量比较大时,目标数据量超过大概 1/5 就会变成全表扫描) 不放心的话可以看下执行计划 |
5
littlewing 2019-05-05 14:38:47 +08:00
@xivisi 如果表大了 join 效率低可以考虑在业务层分两次查询
不过看情况应该还好,file_path 的 hash 应该是唯一的吧,优化器应该会选择 file_path 作为驱动表,那样的话 join 效率还是很高的 |
6
xivisi OP |