1

我在 memsql 和 mysql 中运行了以下查询,但它所花费的时间完全不同。

内存sql

select count(*) from po A , cu B , tsk C  where A.customer_id = B.customer_id and B.taskid = C.id and A.domain = 5  and week(B.post_date) = 22;
+----------+
| count(*) |
+----------+
|    98952 |
+----------+
1 row in set (19.89 sec)

mysql

select count(*) from po A , cu B , tsk C where A.customer_id = B.customer_id and B.taskid = C.id and A.domain = 5  and week(B.post_date) = 22;
+----------+
| count(*) |
+----------+
|    98952 |
+----------+
1 row in set (0.50 sec)

为什么在 mysql 这么快的情况下 memsql 的性能如此糟糕?

mysql 和 memsql 都在同一个 8GB 的​​四核机器上。memsql 有 1 个主聚合器节点和 3 个叶节点。

如果有连接,memsql 的性能会很差吗?

更新

文档中可以清楚地看出,表应该在预期经常加入的列上有一个分片键。这允许优化器在查询执行期间最小化网络流量。

所以我认为我错了。我没有使用分片键,而是在表上添加了一个简单的主键。

4

1 回答 1

2

您是否尝试过第二次在 MemSQL 中运行查询?MemSQL 在第一次看到查询时编译并缓存查询执行代码——MemSQL 称之为代码生成。

http://docs.memsql.com/latest/concepts/codegen/

当您再次运行查询时,您应该会看到相当大的性能加速。

于 2015-09-04T16:25:54.933 回答