explain
SELECT COUNT(*) AS Count, CreatedBy
FROM `Notes`
INNER JOIN Users ON UserID = CreatedBy
INNER JOIN UserRoles ON URoleID = RoleID AND RoleID = 1
WHERE NoteVisible = 1 AND NoteText NOT LIKE '%SOME KEYWORD%'
AND Created BETWEEN '2014-02-24 00:00:00' AND '2014-02-24 23:59:59'
GROUP BY CreatedBy
MySQL zwischen zwei Datetimes nicht verwendet INDEX
Wie Sie ref sehen NULL ist und geht durch Zeilen statt nur Reihe durchlaufen. Jetzt für dieses Beispiel ist das schnell, aber wenn ich einen Bereich von 1-2 Monaten mache, wird die Zeile > 10000 und es verlangsamt die Seite viel und stopt Tabellen.
HINWEIS Wenn ich entfernen die 00.00.00 und 23.59.59 dann verwendet sie Index geht es nur durch 1 Zeile, aber ich brauche alle Daten für den ganzen Tag wählen bei 00 starten : 00 und endend bei 23:59.
Bitte helfen Sie mir diese Anfrage umstrukturieren, um dieses Problem zu beheben oder mögliche Lösungen vorschlagen. Danke.
EDIT
Ersetzen ZWISCHEN von < oder > oder < = oder > = hat das Problem
Was passiert, wenn Sie ersetzen 'BETWEEN' für' (‚2014.02.24‘ <= Erstellt UND Erstellt < ‚2014- 02-25 ') '? – vadchen
Bereits verwendet, dass in verschiedenen Variationen immer noch nicht Index – GGio
verwenden Bitte Struktur von Tabellen, oder fügen Sie mindestens Präfixe zu Spaltennamen in der Abfrage, es ist schwer zu erraten, welche Spalte zu welcher Tabelle gehören. Gehört 'NoteVisible' zu' Notes'? – krokodilko