Répondre à votre question très:
Je suis curieux de savoir si mettre un index sur le champ de la date permettra d'accélérer les deux requêtes?
Si la condition sur installdate
et serviceday
est sélectif (qui est peu de lignes le satisfont), alors oui, il vous aidera.
Les champs de date ont généralement tendance à être sélectifs.
ou est-ce que le fait que j'utilise FUNDINGSTATUS
dans la première clause où cette requête n'utilisera pas l'index?
Oui, l'index sera toujours utilisé.
Le moteur utilisera l'index pour sélectionner uniquement les enregistrements avec installdate = $date
et le filtre sur la valeur de fundingstatus
.
Pour de meilleurs résultats, créez les indices suivants:
ACCOUNTS (installdate, fundingstatus)
service (serviceday)
Si DEAD
est une valeur fréquente pour fundingstatus
, il peut être préférable de réécrire cette requête comme ceci:
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
de sorte que la l'accès à la plage sur les deux champs (installdate, fundingstatus)
peut être utilisé.
Bien que ce soit correct, il ne répond pas réellement à la question qu'il a posée. –
DEAD n'est pas encore fréquent, mais ce sera le cas. il y aura aussi éventuellement 6 à 7 autres statuts de financement. Je suis juste curieux, comment l'accès à la gamme aide-t-il (ou plus alors, comment ça marche). Je viens de faire des recherches sur mysql ces derniers temps et je n'ai rencontré le terme que quelques fois. – mlebrun15
L'accès à la gamme est plus cher ** par ligne ** (en règle générale, 10 fois plus cher). Cela signifie que si votre condition filtre 90% de lignes de plus, alors l'accès 'range' sera meilleur. – Quassnoi