- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要首先指出,我绝不是数据库专家。我确实知道如何使用需要数据库后端的多种语言来编写应用程序,并且对 MySQL、Microsoft SQL Server 和现在的 MEMSQL 相对熟悉——但同样,我不是数据库专家,因此非常感谢您的意见。
我一直致力于开发一个必须交叉引用多个不同表格的应用程序。我最近遇到的一个非常简单的问题示例是,我必须:
运行 #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/
我正在尝试使用 golang 在 memsql 中执行查询。但我不断出错。“MemSQL 不支持服务器端准备好的语句。” 我什至使用了“interpolateParams=true”,但仍然出现同样的
这里提到的错误:http://docs.memsql.com/latest/tshoot/2002/我正在使用 Ubuntu 14.04.2。 MySQL 客户端和最新的 MemSQL 建议将“my.
我发现 MEMSql 不支持用户定义的变量 ( source )。 有什么解决方法吗?它会出现在未来的版本中吗? 我想通过用户定义的变量进行SQL 注入(inject)保护。还有其他好的方法吗? 最佳
我有一个 MemSQL 集群,它有 1 个主聚合器和 3 个叶节点。主聚合器和 3 个叶节点分别运行在不同的服务器上,因此总共有 4 个服务器。 每天,主聚合器服务器上都会运行一个进程,该进程会截断
我有一种情况,我需要一个代理键 (id) 来代替复合键(4 个字段组合起来是唯一的:project_id、dataset_id、table_id、view_name) 以便在其他表中轻松引用它。 为此
在CentOS x64上遵循Quick-Start Guide to installMemSQL,4核,12 GB RAM。 当运行./install.sh作为root时,MemSQL会成功安装,但会
MySQL 似乎也有相同的 4096 列限制。有什么方法可以覆盖它并创建更大的表,例如。列存储格式? 最佳答案 MemSQL 中的列限制目前为 4096,并且不可调整。解决它的最佳方法是使用 JSON
我在一台机器上安装了 Memsql 功能测试,聚合节点位于端口 3307 和叶节点 3306。在运行查询时,可能会有额外的 CPU 可用。因此,是否可以在同一台机器上添加更多叶节点以利用可用资源? 我
我是 MemSQL 新手。我在具有 5 个叶节点和 2 个聚合器节点的集群上的 MemSQL 中创建了一个数据库和表。 Spark 正在同一个集群上运行。一切都处于默认模式。插入数据和删除数据相同。
我在 Ubuntu 14 LTS 上安装了 MemSQL 的单服务器集群。我无法连接到端口 3306 上的 memsql,但集群正在端口 9000 上运行。好像一片叶子掉下来了。当我尝试将 memsq
新的MemSQL版本可以计算多边形的并集吗?例如计算两个相邻甚至截取多边形的边界? +----+ | | | +-+--+ +--+-+ | | | +----+ 到 +-
我想在 memsql 中有一个完整的外部联接。就像是 SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id 是否可以 ? 最佳答案 MemSQL 似乎没有
我们有两个表: dates 表,包含过去 10 年和 future 10 年的每天一个日期。 states 表包含以下列:start_date、end_date、state。 我们运行的查询如下所示:
我正在使用 Liquibase 来管理我的数据库迁移。与导致问题的 MySQL 相比,MemSQL 命令似乎有所不同。 我正在通过 Liquibase 运行以下命令:- ALTER TABLE tes
我们使用 memsql 列式存储数据库。我们为后端架构中的每个“偶数类型”创建管道,并为其创建一个专用表(我们称之为“源表”)。因此每个管道都会写入 memsql 上的一张表(也称为源表) 我们为客户
我正在 memsql 上尝试 TPCH DDL 查询。我是 memsql 的新手。我无法将 5 个 TPCH ddl sql 查询转换为 memsql 查询。无法使用 memsql 的 FOREIGH
我正在尝试将 blob 插入到我的 MemSQL 数据库中。 这是我插入源代码的地方,所以我将它转换成一个 blob: byte[] bytes = rs.getString(2).getBytes(
我需要首先指出,我绝不是数据库专家。我确实知道如何使用需要数据库后端的多种语言来编写应用程序,并且对 MySQL、Microsoft SQL Server 和现在的 MEMSQL 相对熟悉——但同样,
将节点(叶节点或聚合器)添加到 memSQL 集群非常简单:我编辑了 memsql_cluster.json 并重新运行 memsql-cluster 设置。问题是向现有表添加分区。这里的要点是向上扩
我想使用 GORM 域对象在我的 MemSQL 数据库中创建一个引用表。这将允许我们的 Grails 服务器在 MemSQL 中创建/删除引用表以进行开发。 除了在表上指定主键之外,是否可以使用 GO
我是一名优秀的程序员,十分优秀!