Mysql
 sql >> Datenbank >  >> RDS >> Mysql

UNION ALL und LIMIT in MySQL

Derzeit führt MySQL alle Auswahlen für eine Vereinigung aus, selbst wenn in den ersten paar Abfragen genügend Zeilen vorhanden sind, wie @Yuki Inoue in ihrer Antwort erwähnte. Mit der Antwort von @ user1477929 könnten Sie Ihre Abfrage folgendermaßen umschreiben:

(SELECT a FROM t1 WHERE a=10 AND B=1 LIMIT 1000) 
UNION ALL 
(SELECT a FROM t2 WHERE a=11 AND B=2 LIMIT 1000) 
UNION ALL 
(SELECT a FROM t3 WHERE a=12 AND B=3 LIMIT 1000) 
ORDER BY a LIMIT 1000;

Dadurch erhalten Sie höchstens 1000 Zeilen und scannen nie mehr als 3000.