MYSQL Count Query returniert 0, trotz passender Records

Ausgangspunkt für dieses Problem war eine Liste von Datensätzen die auf einer MYSQL Datenbank basierte. Die Liste wurde auch korrekt ausgegeben, die Anzahl der Records wurde jedoch als 0 angezeigt, was in weiterer Folge zu Problemen mit der Paginierung führte.

Das eigentliche MYSQL Problem

mysql> SELECT Count(*) FROM companies WHERE b_deleted = 0 AND b_derivation = 0;
+----------+
| Count(*) |
+----------+
| 0 |
+----------+
1 row in set (0,02 sec)

Wenn man allerdings

mysql> SELECT * FROM companies WHERE b_deleted = 0 AND b_derivation = 0;
.
.
.
10711 rows in set (1,18 sec)

aufruft, werden alle gesuchten Records korrekt angezeigt.

Lösung

Weitergeholfen hat mir dann ein Eintrag in der MYSQL Bug Datenbank. Des Rätsels Lösung: Man muss einfach den optimizer_switch index_merge_intersection deaktivieren:

mysql> set session optimizer_switch="index_merge_intersection=off";SELECT Count(*) FROM companies WHERE b_deleted = 0 AND b_derivation = 0;
Query OK, 0 rows affected (0,00 sec)

+----------+
| Count(*) |
+----------+
| 10711 |
+----------+
1 row in set (0,32 sec)

Es scheint so, als gäbe es öfter Optimierungen oder Probleme die auf diesen optimizer_switch zurückzuführen sind (z.B. https://www.percona.com/blog/2012/12/14/the-optimization-that-often-isnt-index-merge-intersection/), deswegen habe ich dieses Thema mal auf meine Rechercheliste gegeben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert