MEMSQL与MySQL

JDA*_*JDA 5 mysql singlestore

我需要首先指出,我绝不是一个数据库专家.我知道如何使用几种需要数据库后端的语言来编程应用程序,并且相对熟悉MySQL,Microsoft SQL Server和现在的MEMSQL - 但同样,不是数据库方面的专家,所以非常感谢您的输入.

我一直在开发一个必须交叉引用几个不同表的应用程序.我最近遇到的一个非常简单的问题是,我必须:

  1. 每天将600K到1M的记录下拉到临时表中.
  2. 比较这个新数据拉和旧数据之间的变化.将该信息记录在单独的表中.
  3. 使用新记录重新填充表.

运行#2是类似于的查询:

SELECT * FROM (NEW TABLE) LEFT JOIN (OLD TABLE) ON (JOINED FIELD) WHERE (OLD TABLE.FIELD) IS NULL
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我正在比较给定字段上的两个表,然后提取已更改内容的信息.

在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构建视图和表格,使用Visual Studio MySQL连接器同样适用于工作,但有时会很痛苦,因为某些原因我可以添加查询但不能添加表适配器)...抱歉,我会单独提交问题:)

考虑到两个虚拟机的配置完全相同,并且SSD支持,任何人都可以给我任何关于如何调整MySQL实例以运行MySQL上面的大查询的建议吗?我知道我也可以创建一个内存数据库,但我读过可能会有一些持久性问题这样做,不确定.

谢谢!

Ish*_*ael 3

发生这种情况的最可能原因是您的一个或两个表中没有索引joined field。根据这篇文章:

https://www.percona.com/blog/2012/04/04/join-optimizations-in-mysql-5-6-and-mariadb-5-5/

Vanilla MySQL 仅支持嵌套循环连接,这要求索引性能良好(否则它们需要二次时间)。

MemSQL 和 MariaDB 都支持所谓的哈希联接,它不需要您在表上有索引,但会消耗更多内存。由于您的数据集对于现代 RAM 大小而言小得可以忽略不计,因此在您的情况下不会注意到额外的内存开销。

因此,解决该问题所需要做的就是joined field在两个表中添加索引。

另外,请在单独的问题中或在 中描述您在连接到 MemSQL 时遇到的开源工具问题,chat.memsql.com以便我们可以在下一版本中修复它(我在 MemSQL 工作,与 MySQL 工具的兼容性是其中之一)我们的优先事项)。