Ich mal wieder mit Problemen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.\n\n
<!--EDIT|Froschpopo|1179076756-->