Простое соединение между 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/
Когда вы снова запустите запрос, вы увидите значительное повышение производительности.