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.