MySQL 大表有性能问题,但如果只查最近的数据呢?

2021-04-17 16:42:41 +08:00
 daoqiongsi1101

有个疑问,MySQL 在有索引的情况下,如果数据达到一定的量级,查询同样也会有性能问题,那么如果只查最近的数据呢?比如 id 是自增长的,只查最近几十条,这种情况是否查询比较快,还是说查询性能只跟数据量和索引有关,跟是否最近的数据没有关系。

谢谢!

2290 次点击
所在节点    MySQL
9 条回复
xuanbg
2021-04-17 16:57:03 +08:00
所以大表需要拆分和旧数据归档,减少体量就能重新快起来了。
opengps
2021-04-17 17:20:20 +08:00
id 本身默认也是个索引,很多时候能否快速查到,也看索引是否足够快速过滤。我推测:只查最近,跟索引的正序倒叙有会直接关系
FrankAdler
2021-04-17 18:00:17 +08:00
索引是个树,不管树多深,如果只遍历头部几个节点,性能是没有区别的
akira
2021-04-17 18:25:44 +08:00
只查最近的数据 ,也需要对应的索引来缩小范围
zlowly
2021-04-18 03:32:27 +08:00
你得知道,一般数据库数据的存放无论是物理还是逻辑上都不一定是按顺序,特别是有删除更新的情况下。但是有可能你最近新增的数据会仍在内存缓冲里,这时候的由于节省了磁盘开销所以性能看起来会快些。
wakzz
2021-04-18 09:26:24 +08:00
MySQL 的 innodb 引擎有个缓存池,专门缓存底层数据页。只考虑大表的性能问题,不考虑 SQL 优化的话,查询时在索引树能完全被缓存层命中的情况下,记录行被缓存层命中率越低,性能越慢。
这里字段缓存层指的是 innodb_buffer_pool,优先会缓存热点数据。因此在大表的查询中尽可能避免命中冷门数据,那么数据量对查询性能基本没有什么影响。
ltfree
2021-04-18 14:11:31 +08:00
只查询最近的数据,也就是缩小查询的范围,这种方法是可以提高查询效率的。
Evilk
2021-04-18 14:55:27 +08:00
我司,有个大表,4 亿多条数据,根据 relative_id and resource 查询,基本上 3s 没返回
myd
2021-04-18 21:31:21 +08:00
@Evilk 这么慢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/771301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX