Простое соединение между 3 таблицами занимает много времени в memsql

Я запустил следующий запрос в memsql и mysql, но время, затрачиваемое на это, совсем другое.

Memsql

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)

Почему memsql так плохо работает, а mysql так быстр?

И mysql, и memsql находятся на одном и том же 8 ГБ четырехъядерном компьютере. memsql имеет 1 главный узел-агрегатор и 3 конечных узла.

Memsql плохо работает, если есть объединения?

ОБНОВИТЬ

Из документа ясно, что таблица должна иметь ключ-столбец, который, как ожидается, будет часто соединяться. Это позволяет оптимизатору минимизировать сетевой трафик во время выполнения запроса.

Так что я думаю, что здесь я ошибся. Вместо того, чтобы иметь ключ шарда, я добавил простой первичный ключ в таблицы.

1 ответ

Решение

Вы пытались запустить запрос в MemSQL во второй раз? MemSQL компилирует и кэширует код выполнения запроса при первом обнаружении запроса - MemSQL называет его генерацией кода.

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

Когда вы снова запустите запрос, вы увидите значительное повышение производительности.

Другие вопросы по тегам