mycat學習 2 關於聯表查詢

2021-08-16 06:27:03 字數 933 閱讀 4284

在使用資料庫中介軟體之前,我就想到分庫分表的操作對於聯表操作可能會顯得非常複雜。因為如果資料是分片儲存的,如果主表的資料在1分片,從表對應的資料在2分片,那麼這一次聯表查詢就需要跨節點,如果業務再複雜一點,顯然會造成不必要的效能損耗。今天在研究mycat文件的時候看到mycat很巧妙的解決了這個問題:

mycat借鑑了newsql領域的新秀foundation db的設計思路,foundation db創新性的提出了table group的概念,其將子表的儲存位置依賴於主表,並且物理上緊鄰存放,因此徹底解決了jion的效率和效能問題,根據這一思路,提出了基於e-r關係的資料分片策略,子表的記錄與所關聯的父表記錄存放在同乙個資料分片上。「

目前有兩個表:tab_user(id,name) 和 tab_orders(id,user_id), tab_user中的id作為orders中的外來鍵。

在schema.xml進行配置:  

<

table

name

="tab_user"

datanode

="dn1,dn2"

rule

="mod-long"

>

<

childtable

name

="tab_orders"

joinkey

="user_id"

parentkey

="id"

/>

table

>

這段配置**,告訴了mycat將tab_orders的user_id和tab_user的id關聯起來,在對orders表進行插入操作時,將會判斷插入資料的user_id處於哪乙個分片,然後將資料插入該分片,這樣便實現了將關聯資料存放在乙個分片的目的。當然,如果關聯了更多的表,就繼續在childtable下面配置childtable.

關於SQL聯表查詢

一 natural join 自然連線 兩張表通過natural join連線的時候,相當於有個隱含的where子句,對兩張表中同名的對應列相比較看是否相等。二 cross join 建立笛卡爾積 對兩張表通過交叉聯合產生第三張返回結果集的表。相當於普通的連線。三 inner join 內連線 內連...

mycat是什麼 MYCAT學習2

1.mycat的使用 rule 1 的作用是什麼?指定使用的分片演算法 2 中name屬性的作用是什麼?name 屬性指定唯一的名字,用於標識不同的分片規則。內嵌的 rule 標籤則指定對物理表中的哪一列進行拆分和使用什麼分演算法 3 中columns屬性的作用是什麼?指定要拆分的列名字 4 中al...

zf聯表查詢

zf支援聯表查詢,並且會經常遇到聯表查詢,具體 寫法如下 select this select select from this name,array id name select distinct select joinleft jobname,jobname.enterprise id this...