あなたの質問に答える:
日付フィールドにインデックスを付けると、両方のクエリが高速化されるかどうか知りたいですか?
条件がオンinstalldate
で選択的serviceday
である場合(つまり、それを満たす行が少ない場合)、はい、それは役に立ちます。
日付フィールドは通常、選択的である傾向があります。
またはFUNDINGSTATUS
、最初のwhere句で使用すると、そのクエリでインデックスが使用されなくなりますか?
はい、インデックスは引き続き使用されます。
エンジンはインデックスを使用してレコードのみを選択installdate = $date
し、の値でさらにフィルタリングしますfundingstatus
。
最良の結果を得るには、次のインデックスを作成します。
ACCOUNTS (installdate, fundingstatus)
service (serviceday)
DEAD
が頻繁に発生する値である場合は、次のfundingstatus
ようにこのクエリを書き直す方がよい場合があります。
SELECT INSTALLER, INSTALLTIME, RESULT, JOBNUMBER, HONAME, ADDRESS, CITY, STATE, ZIP, NOTES, SMNOTES, '' as priority, PAFS, upsell, TERM, MMRUPGRADE, WARRANTY, EFT
FROM ACCOUNTS
WHERE INSTALLDATE = '$date' AND FUNDINGSTATUS < 'DEAD'
UNION ALL
SELECT INSTALLER, INSTALLTIME, RESULT, JOBNUMBER, HONAME, ADDRESS, CITY, STATE, ZIP, NOTES, SMNOTES, '' as priority, PAFS, upsell, TERM, MMRUPGRADE, WARRANTY, EFT
FROM ACCOUNTS
WHERE INSTALLDATE = '$date' AND FUNDINGSTATUS > 'DEAD'
UNION
SELECT technician, servicetime, result, ID, Customername, address, city, state, zip, notes, board, priority, '', '', '', '', '', ''
FROM service
WHERE serviceday = '$date'
ORDER BY
INSTALLER, priority
両方のフィールドの範囲アクセスを(installdate, fundingstatus)
使用できるようにします。