2009-07-02 7 views
1

eine Abfrage wie folgt gegeben:Limits auf der Anzahl der Werte in „IN“ fragt

DELETE FROM FOO WHERE ID in (1,2,3,4,....); 
  • Gibt es eine Obergrenze für die Anzahl der Werte in der Aufnahme? (Ich habe gesehen, Oracle bei 1000 beschweren, aber das war eine lange Zeit alt. Ich habe keine Ahnung, ob das Installation abhängig, Orakel-Version, etc. usw., oder wie mysql dies begrenzt.

  • Was sind die Auswirkungen auf die Leistung? Wäre es den Satz von Werten in kleinere Teilmengen schneller zu brechen und mehrere Löschanfragen senden?

Antwort

4

Von the docs:

Die Anzahl der Werte in der IN-Liste ist nur durch den Wert max_allowed_packet begrenzt.

In Bezug auf die Leistung würde ich die Abfragen aufteilen, wenn sie beginnen, tausend IDs oder so zu nähern. IN ist ziemlich gut optimiert, aber es scheint immer noch nicht gut zu sein, wenn man riesige Listen darüber wirft.

+2

Vielen Dank für den Beitrag aus dem Dokument - Ich weiß nicht, warum die Leute das nicht sofort für solche Fragen tun. – Sampson

2

Wenn Sie sicher sein wollen, dass Ihre Aussage wird immer funktionieren, setzen Sie sie in eine Temp-Tabelle und führen Sie die IN-Anweisung dagegen.

+0

Wie genau würde das gemacht werden? "LÖSCHEN VON FOO WHERE ID in bar.id;"? – Thomas

+1

LÖSCHEN VON FOO WO ID IN (SELECT ID VON BAR) –

+0

Ah ... vielen Dank. – Thomas

Verwandte Themen