簡體   English   中英

Mysql查詢加入5個表

[英]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



看起來您遇到了性能問題。 要優化您的數據庫結構,您有多種選擇:

  1. 在您的鍵上添加索引。

    讓我們來看看你的 join 語句:

    加入 tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id

    在 tbl_saleinvoice_commission_log 表上的 Department_id 上添加聚集索引將在性能方面幫助您很多。 有關更多信息,您可以查看鏈接。

  2. 分區是另一種提高性能的方法,但您需要檢查您的數據庫結構,看看它是否適合您。 有關更多信息,您可以查看鏈接。

此外,我相信您的表是一對多的,因此您可能需要檢查要檢索的行數。 如果您的數據庫服務器無法處理大量行,您可能需要改進數據庫守護程序的硬件或 CPU 使用限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM