我是分片的新手,想知道分片对各种查询有什么影响。对于名为“people”的样本数据集:
person_id | person_fname | person_lname | person_dob
----------------------------------------------------
1 | John | Smith | 1972-03-04
2 | Sally | Jones | 1968-09-14
3 | Phil | Forrester | 1976-11-25
4 | Gwen | Langley | 1955-04-20
5 | Pedro | Romero | 1962-12-21
6 | Gene | Halford | 1978-01-11
7 | Juan | Peza | 1977-08-07
8 | Pierre | Henry | 1980-04-30
通过创建代理身份“id”的散列,数据在四个节点上平均分片。但是,您需要对可能跨越所有节点的记录执行读写操作,例如:
SELECT person_fname,
person_lname
FROM people
WHERE person_dob > '1970-01-01'
或者说您有另一个“订单”表,它在“person_id”列上引用“人员”,并且想要执行连接......
SELECT order_id,
order_amount,
order_date,
person_fname,
person_lname
FROM orders
LEFT JOIN people
WHERE order_amount > 50
是否实际上所有节点都将并行运行查询?我假设每台服务器的每个步骤都要做更少的工作,而不是一个实例对八个记录运行查询,同时,四个实例将对两个(ish)记录运行查询,如果 DBMS能够执行分片选择,那么其他节点不需要继续执行任何进一步的指令,这个假设是否正确?
分片和复杂连接是否有任何已知的性能影响(除了这个简单的例子)?