2017-10-28 7 views
0

私はこのクエリをmysqlで実行しており、数時間待っても完了しません。OR句で2つのテーブルを結合する

select * 
from merged as rm 
inner join client_Master as E on E.Code = rm.Code 
inner join client_loan_details as d on (d.Loan_Account = rm.loanacno or rm.savingacno = d.SavingAccount) and d.id = E.id 
group by rm.client_name; 

テーブルの行(マージされたおよびclient_loan_details)は1,000万であるため、時間がかかります。私はmysqlが正しいインデックスを使用していることを確認しましたが、それは問題ではありません。しかし、私の質問が正しいかどうかは不思議です。 私はテーブルrmとdを結合しています。テーブルEは中間テーブルです。 SQL標準に従ってクエリが正しいか、何か不足していますか?

+0

は中間テーブルが必要ですか? –

+1

クエリプランも含めてください –

+0

@marshalcraft中間テーブルはクライアントのIDを取得するために必要です。私はまた、各セット(Client_Master + Client_details =中間と併合+中間)の2つのクエリを使用しようとしたが、それも時間がかかる。行数が多いためです。右? – shantanuo

答えて

1

私は、結合でORのパフォーマンスが悪かったです。それを参加から外してみてください。 GROUP BYステートメントは集計なしでDISTINCTを実行していますが、すべてを選択している間は1つの列に対してのみ実行します。私には役に立たないようです。

select * 
from merged as rm 
inner join client_Master as E on E.Code = rm.Code 
inner join client_loan_details as d on d.id = E.id 
WHERE (d.Loan_Account = rm.loanacno or rm.savingacno = d.SavingAccount) 
関連する問題