Es fühlt sich ziemlich einfach an, außer MySQL.IF Bedingung Abfrage durchführen, sonst Abfrage durchführen
Grundsätzlich muss ich wechseln, welche Art von Index ich zusammen mit ein paar anderen Bedingungen verwende, basierend darauf, wie viele Ergebnisse ein bestimmter Ausdruck zurückgibt.
etwas in der Art von:
IF (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
EXECUTE QUERY A
ELSE
EXECUTE QUERY B
Ist das möglich in einer MySQL-Anweisung?
EDIT:
Abfrage A:
SELECT id
FROM table_a
FORCE INDEX(id)
JOIN table_b ON table_a.id = table_b.id
WHERE term LIKE "term"
ORDER BY date
LIMIT 100;
Abfrage B:
SELECT id
FROM table_a
FORCE INDEX(term)
JOIN table_b ON table_a.id = table_b.id
WHERE term LIKE "term"
GROUP BY term # These lines would be included for a few conditions not mentioned above.. but are necessary
HAVING COUNT = 1 # same...
ORDER BY date
LIMIT 100;
Der Grund für die Abfrage Schalter I dramatisch anderes Ergebnis Zeiten zu erhalten, basierend auf der Popularität des "Begriff".
Was sind 'QUERY A' und' QUERY B' spezifisch? SQL lässt normalerweise zu, dass diese Situation mit einer kreativen "WHERE" -Klausel behandelt wird, aber wir können nicht sagen, es sei denn, wir wissen, ob A & B ausreichend miteinander verwandt sind. –
... Ansonsten erlaubt MySQL nur die Verwendung von Ablaufsteuerungslogik in Funktionen, Triggern und gespeicherten Prozeduren - nicht in regulären Abfragen. –
In der Theorie - ja (mit Hilfe von 'CASE' Statement und Joins), aber es hängt davon ab, ob die Anzahl der Felder und Datensätze in beiden Abfragen übereinstimmen.Sie sollten diese beiden zusammen mit Testdaten veröffentlichen, damit wir antworten können. –