MEMSQL与MySQL

MEMSQL与MySQL,mysql,singlestore,Mysql,Singlestore,首先,我需要指出,我绝对不是一个数据库专家。我知道如何使用几种需要数据库后端的语言编写应用程序,并且对MySQL、Microsoft SQL Server和现在的MEMSQL都比较熟悉,但我不是数据库方面的专家,因此非常感谢您的意见 我一直在开发一个应用程序,它必须交叉引用几个不同的表。我最近遇到的一个问题的一个非常简单的例子是,我必须: 每天,将600K到1M的记录下拉到一个临时表中 比较新数据拉取和旧数据拉取之间的变化。将该信息记录在单独的表格中 用新记录重新填充表 运行#2类似于以下查询:

首先,我需要指出,我绝对不是一个数据库专家。我知道如何使用几种需要数据库后端的语言编写应用程序,并且对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 server上运行得比较好,但实际上我需要使用开源SQL Workbench和MySQL java适配器来构建视图和表。使用Visual Studio MySQL连接器也可以,但有时会很痛苦,因为某些原因,我可以添加查询,但无法添加表适配器)…对不起,我将为此提交一个单独的问题:)

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


    谢谢大家!

    发生这种情况的最可能原因是,在一个或两个表中,
    联接字段
    上没有索引。根据这篇文章:

    Vanilla MySQL只支持嵌套循环联接,这需要索引执行良好(否则需要二次时间)

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

    因此,解决这个问题所需要做的就是在两个表中的
    联接字段
    上添加索引


    另外,请在一个单独的问题中或在
    chat.MemSQL.com
    中描述您在连接到MemSQL时所面临的开源工具问题,以便我们在下一个版本中解决它(我为MemSQL工作,与MySQL工具的兼容性是我们的优先事项之一)。

    两个表上的联接字段都索引了吗?(如果在复合索引中,它是索引的第一个字段吗?)。谢谢你,我将把这些作为索引添加,看看是否有帮助!