这种情况下是否需要分表
数据库是 SQL Server. 数据一亿多条吧.
很简单的接口, 传入用户的 id, 返回这条记录.
因为加了索引, 所以查询起来都是 ms 级的, 所以就没做分表了.
但是甲方后来知道了, 就开始责备为什么不分表.
所以想问下, 如果查询时间上完全没有问题, 数据也是一次导入不会增加了. 这种情况下, 不分表有问题吗?
还是说会影响到整个数据库性能?
数据库是 SQL Server. 数据一亿多条吧.
很简单的接口, 传入用户的 id, 返回这条记录.
因为加了索引, 所以查询起来都是 ms 级的, 所以就没做分表了.
但是甲方后来知道了, 就开始责备为什么不分表.
所以想问下, 如果查询时间上完全没有问题, 数据也是一次导入不会增加了. 这种情况下, 不分表有问题吗?
还是说会影响到整个数据库性能?
如果耗时 10ms 内可以不用优化。pct99 一直不稳的话可以考虑分库分表
同一个 instance 内,有时会分表或分区,比如订单按日期分,由于一般情况只会访问几个月以内的订单,分区做到了冷热数据分离,减少了热数据规模。
但是同一个 instance 内,不区分冷热数据的分表,提升就不太明显了,虽然很多项目都无脑这么做。
总量没有减少,但是你查询只会落到分片上,不会走所有索引啊。5 次 io 减少到 3 次 io 提升已经很明显了好吧
极端情况不用提了,没啥意义
1. 分 n 个表之后,每个表索引是之前的 1/n
2. n 个分表的总索引大小,跟分表前一样
3. 随机全量查一次每一行,相当于随机遍历索引的每一个节点
4. IO 总量就是索引读取量
5. 索引量一样,所以 IO 量一样
本来有 5 层的时候,如果第 4 层开始频繁出现 cache miss,分表之后,每个表能用的 cache 也要被平分,可能第 3 层就开始频繁的 cache miss 了,均摊下来磁盘 IO 次数并没有减少。