我需要首先指出我绝不是数据库专家。我确实知道如何使用需要数据库后端的多种语言编写应用程序,并且对 MySQL、Microsoft SQL Server 和现在的 MEMSQL 相对熟悉 - 但同样,我不是数据库专家,因此非常感谢您的意见。
我一直在开发一个必须交叉引用几个不同表的应用程序。我最近遇到的一个问题的一个非常简单的例子是,我必须:
- 每天,将 600K 到 1M 的记录下拉到一个临时表中。
- 比较新数据拉取和旧数据拉取之间的变化。将该信息记录在单独的表格中。
- 用新记录重新填充表。
运行 #2 是一个类似于以下内容的查询:
SELECT * FROM (NEW TABLE) LEFT JOIN (OLD TABLE) ON (JOINED FIELD) WHERE (OLD TABLE.FIELD) IS NULL
在这种情况下,我将比较给定字段上的两个表,然后提取更改的信息。
在 MySQL (v5.6.26, x64) 中,我的查询超时。我正在运行 4 个 vCPU 和 8 GB RAM,但请注意,我的其余配置是默认配置(没有调整任何参数)。
在 MEMSQL(v5.5.8,x64)中,我的查询在第一次尝试时运行大约3 秒。我正在运行具有 4 个 vCPU 和 8 GB RAM 的完全相同的虚拟服务器配置,还要注意我的其余配置是默认配置(没有调整任何参数)。
此外,在 MEMSQL 中,我正在运行单节点配置。MySQL 也是如此。
我喜欢这样一个事实,即使用 MEMSQL 让我能够继续开发我的项目,并且我遇到了更大的跨表计算查询和可以运行的视图,这些查询和视图在 MEMSQL 上运行得非常好……但是,在理想的世界中,我会使用 MySQL。我已经遇到了这样一个事实,即我需要使用一组不同的工具来管理我的实例(即:MySQL Workbench 与 MEMSQL 服务器配合得相对较好,但我实际上需要使用开源 SQL Workbench 构建视图和表,并且mysql java 适配器。使用 Visual Studio MySQL 连接器也是如此,可以工作,但有时会很痛苦,由于某种原因,我可以添加查询但不能添加表适配器)...对不起,我将提交一个单独的问题:)
考虑到两台虚拟机的配置完全相同,并且支持 SSD,任何人都可以就如何调整我的 MySQL 实例以在 MySQL 上运行像上面那样的大查询给我任何建议吗?我知道我也可以创建一个内存数据库,但我已经读过这样做可能存在一些持久性问题,不确定。
谢谢!