このクエリを可能な限り最適化しようとしていますが、それでもこのクエリが原因でクエリロックが発生します。改善のための提案はありますか。クエリはテーブルから最後の1日のエントリをフェッチします。
質問:
SELECT CR.id,
CR.servicecode,
CR.leadtime,
CR.redirecturl,
CRE.custemail,
CRE.custlname,
CRE.custfname,
CRE.duration,
CR.userid,
AA.lpintrotimearr,
AA.lpintrotimedep,
AA.landdatetimearr,
AA.landdatetimedep,
CR.newcustid,
cre.CRE.custmobilephone,
CRE.brandname
FROM response CR
LEFT JOIN agreement AA
ON CR.id = AA.id
LEFT JOIN request CRE
ON CRE.id = CR.id
WHERE CR.id > '20120617145243'
AND CR.approved = 1
AND CR.chlapproved != 0
AND CR.chlapproved IS NOT NULL
AND AA.id IS NOT NULL
AND ( AA.stdsign != 'on'
OR AA.stdsign IS NULL )
AND ( AA.ivaflag = 0
OR AA.ivaflag IS NULL )
AND ( AA.opt IS NULL
OR AA.opt = 0 );
説明:
1つの方法は、3つすべての(AA.stdsign、AA.ivaflag、およびAA.opts)列にインデックスを付けることですが、3つのフラグ(AA.stdsign、AA.ivaflag、およびAA.opts)はすべて3つの異なる値しか持つことができません。クエリ実行時?
すべてのIDはvarchar(60)データ型です。