0

私は2つのMySqlテーブルに類似した列を持っています(同じタイプのデータを保存します)

、、などのtableAフィールドがあり、、、、などもある場合 のemailphonecellphoneid tableBemailphonemobileid

tableAからすべてのユーザーを選択したいwhere email = email or phone=phone or mobile=cellphone or id=id

しかし、両方のテーブルのデータが大きすぎて、各テーブルに 100 万レコードを超えています

取得できる最高の Sql クエリは何ですか?

私が使用しているのは

SELECT LN.LEADS360ID ,LN.fundingDate,LN.closedDate  
FROM fsbcorploan.loan  LN inner JOIN fsbcorponline.leads360leads LD ON   
LD.RefId  = LN.LEADS360ID  OR  
LD.Email  = LN.borrower_email OR   
LD.CellPhone = LN.borrower_home_phone OR  
LD.CellPhone = LN.borrower_cell_phone OR  
LD.DayPhone = LN.borrower_home_phone OR  
LD.DayPhone = LN.borrower_cell_phone OR  
LD.EveningPhone = LN.borrower_home_phone OR  
LD.EveningPhone = LN.borrower_cell_phone  
WHERE  dateAdded between '11/01/2012 05:10:00' and '12/11/2012 05:10:00'

実行には13〜15秒かかります

4

1 に答える 1

1

これがより速いかどうか試してください...おそらくそうではありませんが、試してみる価値があります。

SELECT LN.LEADS360ID ,LN.fundingDate,LN.closedDate  
FROM fsbcorploan.loan  LN 
where dateAdded between '11/01/2012 05:10:00' and '12/11/2012 05:10:00'
and exists (
  select 1 from fsbcorponline.leads360leads LD
  where LD.RefId  = LN.LEADS360ID
    OR LD.Email  = LN.borrower_email
    OR LD.CellPhone = LN.borrower_home_phone
    OR LD.CellPhone = LN.borrower_cell_phone 
    OR LD.DayPhone = LN.borrower_home_phone
    OR LD.DayPhone = LN.borrower_cell_phone
    OR LD.EveningPhone = LN.borrower_home_phone
    OR LD.EveningPhone = LN.borrower_cell_phone)

それを回避する方法が本当にない場合は、事前に計算できるある種の「一致が見つかった」計算列を持つことができます。これを行う方法は、このデータが変更される頻度によって異なります。

于 2012-12-11T22:04:39.890 に答える