我需要首先指出,我绝不是一个数据库专家.我知道如何使用几种需要数据库后端的语言来编程应用程序,并且相对熟悉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,我的查询在第一次尝试时运行大约3秒.我正在使用4个vcpu和8 GB RAM运行完全相同的虚拟服务器配置,还要注意我配置的其余部分是默认配置(没有调整任何参数).
此外,在MEMsql中,我正在运行单节点配置. MysqL也是如此.
我喜欢使用MEMsql让我继续开发我的项目的事实,而且我遇到了更大的跨表计算查询和我可以运行的视图,这些查询和视图在MEMsql上运行得非常好……但是,在理想的世界中,我会用MysqL.我已经遇到过这样一个事实:我需要使用一组不同的工具来管理我的实例(即:MysqL Workbench与MEMsql服务器的工作相对较好,但我实际上需要使用开源sql Workbench构建视图和表格,使用Visual Studio MysqL连接器同样适用于工作,但有时会很痛苦,因为某些原因我可以添加查询但不能添加表适配器)…抱歉,我会单独提交问题:)
考虑到两个虚拟机的配置完全相同,并且SSD支持,任何人都可以给我任何关于如何调整MysqL实例以运行MysqL上面的大查询的建议吗?我知道我也可以创建一个内存数据库,但我读过可能会有一些持久性问题这样做,不确定.
谢谢!
最佳答案发生这种情况的最可能原因是因为您在一个或两个表中的连接字段上没有索引.根据这篇文章:https://www.percona.com/blog/2012/04/04/join-optimizations-in-mysql-5-6-and-mariadb-5-5/
Vanilla MysqL仅支持嵌套循环连接,这需要索引执行良好(否则它们需要二次时间).
Memsql和MariaDB都支持所谓的散列连接,它不需要你在表上有索引,但会消耗更多的内存.由于您的数据集对于现代RAM大小来说可以忽略不计,因此在您的情况下不会注意到额外的内存开销.
因此,解决该问题所需要做的就是在两个表中的连接字段上添加索引.
另外,请在单独的问题或chat.memsql.com中描述使用开源工具时遇到的问题,以便我们可以在下一个版本中修复它(我为Memsql工作,兼容MysqL工具是我们的优先事项之一).
总结以上是内存溢出为你收集整理的MEMSQL与MySQL全部内容,希望文章能够帮你解决MEMSQL与MySQL所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)