sebo: SQL_CALC_FOUND_ROWS()

Beitrag lesen

Ich mal wieder mit Problemen

  
SELECT  
    SQL_CALC_FOUND_ROWS  
    a.id,  
    a.name,  
    a.birthday,  
    b.id  
  
FROM defaultusers AS a  
  
LEFT JOIN photos AS b ON  
    b.id = (SELECT MAX(id) FROM photos WHERE user_id = a.id)  
  
WHERE  
    a.status = 'N' and  
    a.sex = 'w'  
  
ORDER BY a.lastlogin DESC  
LIMIT 0, 10;  

Das Problem: ohne SQL_CALC_FOUND_ROWS() dauert die Abfrage 0.13 Sekunden und das bei über 400.000 Bildern (LongBlob) in "photos". Es ist also eine richtig große Datenbank.
Aber sobald ich SQL_CALC_FOUND_ROWS() einsetze, dauert die Abfrage bis zu 16 Sekunden!
Es muss etwas mit dem JOIN zu tun haben, denn ohne JOIN ist SQL_CALC_FOUND_ROWS() extrem schnell.
Das komische ist aber, dass ohne SQL_CALC_FOUND_ROWS() der JOIN sehr schnell ist!
Woran bin ich denn nun?

Das sagt EXPLAIN:

  
+----+--------------------+--------+--------+---------------+------------+---------+------  
  
------+-------+-----------------------------+  
| id | select_type        | table  | type   | possible_keys | key        | key_len | ref        | rows  | Extra                       |  
+----+--------------------+--------+--------+---------------+------------+---------+------  
  
------+-------+-----------------------------+  
|  1 | PRIMARY            | a      | ALL    | NULL          | NULL       |    NULL | NULL       | 20531 | Using where; Using filesort |  
|  1 | PRIMARY            | b      | eq_ref | PRIMARY       | PRIMARY    |       4 | func       |     1 | Using index                 |  
|  2 | DEPENDENT SUBQUERY | photos | ref    | usernummer    | usernummer |       3 | users.a.id |     2 |                             |  
+----+--------------------+--------+--------+---------------+------------+---------+------  
  
------+-------+-----------------------------+  
3 rows in set (0.00 sec)  

Wie man sieht sind INDEX's vorhanden.