[英]Mysql query joining 5 tables
我正在嘗試加入 5 個表,其中我想根據相同的合同 ID 在不同的表上提及不同的貨幣。
當我加入任何三個表時,它會給我結果,但是當我在查詢中再添加一張表時,服務器沒有響應,直到我不得不終止進程。
請幫助我在我做錯的地方。
SELECT c.department_id,
c.contract_id,
c.seller_id,
c.buyer_id,
c.contract_ratecurrency AS contractcurrency,
b.currency_id AS billcurrency,
s.saleinv_currency AS saleinvcurrency,
cm.currency_id AS commissioncurrency,
sl.currency_id AS cmlogcurrency,
c.contract_iscancel
FROM tbl_contracts C
JOIN tbl_contract_bill b ON c.contract_id=b.contract_id
JOIN tbl_contract_saleinvoice s ON c.contract_id =s.contract_id
JOIN tbl_commission_payment cm ON c.department_id = cm.department_id
JOIN tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id
WHERE (c.contract_ratecurrency <> s.saleinv_currency
OR c.contract_ratecurrency <> b.currency_id
OR s.saleinv_currency <> b.currency_id
OR cm.currency_id <> sl.currency_id
OR c.contract_ratecurrency <> cm.currency_id
OR s.saleinv_currency <> cm.currency_id
OR b.currency_id <> cm.currency_id)
AND (c.contract_iscancel =0)
requried result should be
ccontractid,csellerid,cbuyerid,ccurrency,bcurrency,scurrency,cmcurrency,slcurrency
101,25,50,1,1,2,3,1
102,28,16,2,3,1,3,2
看起來您遇到了性能問題。 要優化您的數據庫結構,您有多種選擇:
在您的鍵上添加索引。
讓我們來看看你的 join 語句:
加入 tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id
在 tbl_saleinvoice_commission_log 表上的 Department_id 上添加聚集索引將在性能方面幫助您很多。 有關更多信息,您可以查看此鏈接。
分區是另一種提高性能的方法,但您需要檢查您的數據庫結構,看看它是否適合您。 有關更多信息,您可以查看此鏈接。
此外,我相信您的表是一對多的,因此您可能需要檢查要檢索的行數。 如果您的數據庫服務器無法處理大量行,您可能需要改進數據庫守護程序的硬件或 CPU 使用限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.