【发布时间】:2016-10-25 09:42:49
【问题描述】:
我是数据库新手,所以我有什么:
- 一个表 ~75GB。 (InnoDB)
- 10GB 的索引。
- 高流量
在几个廉价的选择查询之后,我对这个巨大的表进行了插入查询和其他选择。
问题:每次插入都会重新索引,它可能会锁定表/行或什么?当同时有多个请求时,它会如何影响高流量?
【问题讨论】:
标签: mysql database optimization query-optimization
我是数据库新手,所以我有什么:
在几个廉价的选择查询之后,我对这个巨大的表进行了插入查询和其他选择。
问题:每次插入都会重新索引,它可能会锁定表/行或什么?当同时有多个请求时,它会如何影响高流量?
【问题讨论】:
标签: mysql database optimization query-optimization
索引以增量方式更新。无需考虑这个过程;它发生在“背景”中。索引始终是最新的;也就是说,SELECT 将能够像找到旧行一样容易地找到新插入的行。
如果您每秒获得超过 100 个INSERTs,让我们来看看细节。 (SHOW CREATE TABLE,实际INSERT等)
同时,一千个点查询应该没问题。 (即被索引的单行的SELECT。)
高流量...“廉价查询”通常非常快,以至于很少有两个同时运行。即使每秒一千个查询也可能很少同时运行多个查询。长时间运行的查询是另一回事。
几十个主动运行的连接是“重”流量。此时,让我们看看运行时间最长的查询,看看我们是否可以加快它们的速度。
根据 RAM 大小和innodb_buffer_pool_size 以及访问模式,您的大表可能或可能不受 I/O 限制。 UUID/GUID 索引因导致 I/O 迟缓而臭名昭著。您主要查看“最近”行的“日志”或“新闻”将具有“参考位置”,这会导致非常有效的缓存 - 因此表大小与 RAM 无关。
【讨论】: