2015-09-04 74 views
1

我在memsql和mysql中運行了下面的查詢,但是它花費的時間卻大不相同。3個表之間的簡單連接需要花費大量的時間在memsql中

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都在同一個8GB四核機器上。 memsql有1個主聚合節點和3個葉節點。

如果有聯接,memsql表現不好嗎?

UPDATE

Doc很顯然,該表應具有其上有望常常參加在列片鍵。這允許優化器在執行查詢期間最小化網絡流量。

所以我想我在這裏我錯了。我沒有添加分片鍵,而是在表格上添加了一個簡單的主鍵。

+0

你的桌子上有什麼索引?特別是,你有'B.post_date'上的索引嗎? – Ishamael

回答

2

您是否嘗試過第二次在MemSQL中運行查詢? MemSQL在第一次看到查詢時編譯和緩存查詢執行代碼 - MemSQL稱之爲代碼生成。

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

當您再次運行查詢,你會看到一個相當大的性能加速比。

+0

如果這不起作用,請確保您在B.customer_id,C.id和A.domain上有密鑰。 –

+0

完全沒有改變@steven –

相關問題