3 个表之间的简单连接在 memsql 中需要花费大量时间
Simple join between 3 tables takes lot of time in memsql
我运行在memsql和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 (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 个叶节点。
如果有join,memsql性能会不会很差?
更新
从 Doc 可以清楚地看出,table 应该在预计经常加入的列上有一个分片键。这允许优化器在查询执行期间最小化网络流量。
所以我想我错了。我没有使用分片键,而是在 table 上添加了一个简单的主键。
您是否尝试过 运行第二次在 MemSQL 中查询?
MemSQL 在第一次看到查询时编译并缓存查询执行代码 - MemSQL 称之为代码生成。
http://docs.memsql.com/latest/concepts/codegen/
当您再次 运行 查询时,您应该会看到相当大的性能提升。
我运行在memsql和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 (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 个叶节点。
如果有join,memsql性能会不会很差?
更新
从 Doc 可以清楚地看出,table 应该在预计经常加入的列上有一个分片键。这允许优化器在查询执行期间最小化网络流量。
所以我想我错了。我没有使用分片键,而是在 table 上添加了一个简单的主键。
您是否尝试过 运行第二次在 MemSQL 中查询? MemSQL 在第一次看到查询时编译并缓存查询执行代码 - MemSQL 称之为代码生成。
http://docs.memsql.com/latest/concepts/codegen/
当您再次 运行 查询时,您应该会看到相当大的性能提升。