gpt4 book ai didi

mysql - MEMSQL 与 MySQL

转载 作者:可可西里 更新时间:2023-11-01 07:06:59 24 4
gpt4 key购买 nike

我需要首先指出,我绝不是数据库专家。我确实知道如何使用需要数据库后端的多种语言来编写应用程序,并且对 MySQL、Microsoft SQL Server 和现在的 MEMSQL 相对熟悉——但同样,我不是数据库专家,因此非常感谢您的意见。

我一直致力于开发一个必须交叉引用多个不同表格的应用程序。我最近遇到的一个非常简单的问题示例是,我必须:

  1. 每天将 60 万到 100 万条记录拉入临时表。
  2. 比较新数据拉取和旧数据拉取之间发生的变化。将该信息记录在单独的表格中。
  3. 用新记录重新填充表格。

运行 #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 允许我继续开发我的项目,而且我遇到了更大的跨表计算查询和我可以运行的 View ,这些查询和 View 在 MEMSQL 上运行得非常好......但是,在理想的世界,我会使用 MySQL。我已经遇到这样一个事实,即我需要使用一组不同的工具来管理我的实例(即:MySQL Workbench 与 MEMSQL 服务器一起工作得相对较好,但我实际上需要使用开源 SQL Workbench 构建 View 和表,并且mysql java 适配器。使用 Visual Studio MySQL 连接器同样有效,但有时会很痛苦,出于某种原因我可以添加查询但不能添加表适配器)...抱歉,我将单独提交问题:)

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

谢谢!

最佳答案

发生这种情况的最可能原因是因为您在一个或两个表中的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 上添加索引。

此外,请在单独的问题中或在 chat.memsql.com 中描述您在使用开源工具连接到 MemSQL 时遇到的问题,以便我们在下一次修复它版本(我在 MemSQL 工作,与 MySQL 工具的兼容性是我们的首要任务之一)。

关于mysql - MEMSQL 与 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com