我有 2 个表,分别命名为:csv (a csv dump)
和items (primary data table)
7M(csv 转储)和 15M 行。我需要更新items
table 中存在的列csv
。
两个表都有一个共同索引的连接 ID (a VARCHAR(255)
)。
在相互 ID 列(索引)上具有连接的 UPDATE 查询仍需要数天才能运行。经过研究,我认为 MySQL 扫描csv
表并对表进行每行随机访问查询的效率低下items
。
即使有索引,这些索引也不适合内存,因此所需的 7M 随机访问查询是鼻子潜水性能。
是否有解决此类问题的“典型”方法?
更新:
我们基本上采用多个“项目”目录并将它们存储在我们的
items
表中(这有点简化讨论)。比如说 10 个目录中的每一个都有 700 万个项目(我们在项目表中标准化为 1 行的目录中的一些重复项)。我们需要每天比较和验证对这 10 个目录的更改(UPDATES
w/ 两个大表之间的连接,或其他此类机制)。实际上,我们有一张
items
桌子和一张items_map
桌子,但这里不需要讨论额外的抽象级别。我很乐意找到一种在csv
转储表和items
表之间执行更新的方法(假设它们都有一个在两个表中都编入索引的公共 ID)。但是假设该items
表可能有 20M 行,而该csv
表可能有 7M 行。在这种情况下,索引不适合内存,我相信我们正在用随机搜索锤击驱动器