hilfe bei query optimierung

heyho, ich habe folgende datenbank mit ca. 19k einträgen.

Code:
+-----+------------------+------------------+-------+--------+-------+
| id  | uid              | fid              | posts | linked | value |
+-----+------------------+------------------+-------+--------+-------+
|   1 | a93c0e3fb4105dd3 | 859adf2bdf4064f0 |     1 |      0 |     0 |
|   2 | a93c0e3fb4105dd3 | 3229faa85b3b958d |     0 |      0 |     0 |
|   3 | a93c0e3fb4105dd3 | 6acb2a3288750b0b |     0 |      0 |     0 |
|   4 | a93c0e3fb4105dd3 | d3146a7e07afa9ce |     1 |      0 |     0 |
|   5 | a93c0e3fb4105dd3 | 659363a2274f1523 |     1 |      0 |     0 |
|   6 | a93c0e3fb4105dd3 | 17afcd78ef02850f |     0 |      0 |     0 |
|   7 | a93c0e3fb4105dd3 | 195ffbd3badb2df0 |     1 |      0 |     0 |
|   8 | a93c0e3fb4105dd3 | 121c029287b43782 |     0 |      0 |     0 |
|   9 | a93c0e3fb4105dd3 | 672238295fe947fa |     0 |      0 |     0 |
|  10 | a93c0e3fb4105dd3 | 8de35df72d3f438c |    13 |      0 |     0 |
|  11 | a93c0e3fb4105dd3 | 0143cfd9e46c2050 |     1 |      0 |     0 |
|  12 | 79d1f123d480d3f2 | 1d2fa72e5d6bf027 |     0 |      0 |     0 |
|  13 | 79d1f123d480d3f2 | 0036d76cba3e3f49 |     0 |      0 |     0 |
|  14 | 79d1f123d480d3f2 | a4bfa648428f646d |     0 |      0 |     0 |
|  15 | 79d1f123d480d3f2 | 1a608efc36e97fc9 |     1 |      0 |     0 |
|  16 | 79d1f123d480d3f2 | 3a475ce4f2e7f964 |     0 |      0 |     0 |
|  17 | a93c0e3fb4105dd3 | d1e48572db3af02b |     0 |      0 |     0 |
|  18 | a93c0e3fb4105dd3 | 743a6f834b27fdf2 |     0 |      0 |     0 |
|  19 | a93c0e3fb4105dd3 | db736b5e3fe61228 |     0 |      0 |     0 |
|  20 | a93c0e3fb4105dd3 | 79839fcc1572a3da |     2 |      0 |     0 |
|  21 | a93c0e3fb4105dd3 | ed13b0f0595ba73e |     1 |      0 |     0 |
|  22 | a93c0e3fb4105dd3 | 062b0d8ac89c08b9 |     2 |      0 |     0 |
|  23 | a93c0e3fb4105dd3 | a68a2a3ca1f68e43 |     0 |      0 |     0 |
|  24 | a93c0e3fb4105dd3 | 8434e15eb2a60152 |     0 |      0 |     0 |
|  25 | a93c0e3fb4105dd3 | dc40bffe4c276d7c |     3 |      0 |     0 |
|  26 | a93c0e3fb4105dd3 | 7fc4c496895550ba |     1 |      0 |     0 |
|  27 | a93c0e3fb4105dd3 | ac1c5d266a78ddb8 |     0 |      0 |     0 |
|  28 | a93c0e3fb4105dd3 | 215872aec90d8472 |     0 |      0 |     0 |
|  29 | a93c0e3fb4105dd3 | d2478675e50fc52c |     5 |      0 |     0 |

ich möchte jetzt von der uid die zugehörige gesammtpostinganzahl haben, und die pro uid ausgegeben haben.

mein query den ich mir dafür passenderweise überlegt hab, umfasst allerdings ein subquery, weswegen ich damit bei 19k den datenbankserver sprenge.

der query sieht bis dato so aus:

Code:
SELECT
  r.uid,
  (SELECT sum(posts) 
   FROM relation 
   WHERE uid=r.uid) AS posts 
FROM relation AS r 
GROUP BY uid 
ORDER BY posts DESC;

wie optimiert man sowas?
 
Wenn du schon über die User gruppierst, dann sollten die Aggregat-Funktionen (sum,count,max,min,...) doch auch direkt über diese Gruppierung funktionieren?

Code:
SELECT
  uid,
  sum(posts) AS posts_gesamt 
FROM relation 
GROUP BY uid 
ORDER BY posts_gesamt DESC;

edit:
soeben ausprobiert, funktioniert.

edit2:
Original von easteregg
SELECT
r.uid,
(SELECT sum(posts)
FROM relation
WHERE uid=r.uid) AS posts
FROM relation AS r
GROUP BY uid
ORDER BY posts DESC;

das "AS" wird normalerweise nur benutzt, um bei der Projektion der Daten (also alles was zwischen SELECT und FROM steht) einen Spaltennamen/Alias zu vergeben.
Die Betitelung der einzelnen Tabellen erfolgt ohne dem "AS" dazwischen.

MySQL scheint das auch mit "AS" zu schlucken. Andere Datenbanken, wie z.B. Oracle, haben damit ihre Probleme.
 
Zurück
Oben