Hallo mensen, ik heb een query die wel erg lang duurt, en vroeg me af ik het misschien beter kon doen.
De query is:
Als ik EXPLAIN toepas krijg ik het volgende:
De query doet veel join's, maar dat komt door het normaliseren van de database. Is het normaal dat zo'n query er 23 seconden over doet?
De query is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| SELECT i.id, i.ip, CONCAT("<a href='",ref.referrer,"'>",ref.referrer,"</a>") as ref, CASE ref.referrer WHEN 'Google' THEN google.zoekwoorden WHEN 'MSN' THEN msn.zoekwoorden ELSE '' END AS zoekwoorden, res.resolution, col.color, os.os, brow.browser, bwver.version, p.soortpagina,
CASE p.soortpagina
WHEN 'vraag'
THEN a.vraagdef
WHEN 'rubrieken'
THEN c.naam
WHEN 'zoeken'
THEN z.query
WHEN 'bedankt_vraag'
THEN v.vraag
WHEN 'panel'
THEN ad.username
WHEN 'archief'
THEN p.idvandepagina
END as specifiek,
DATE_FORMAT(h.tijd,'%d-%m-%Y %H:%i') as tijd
FROM stats_info i
LEFT JOIN stats_browser brow ON i.browser = brow.id
LEFT JOIN stats_referrer ref ON ref.id = i.referrer
LEFT JOIN stats_resolution res ON res.id = i.resolution
LEFT JOIN stats_os os ON os.id = i.os
LEFT JOIN stats_browser_version bwver ON bwver.id = i.version
LEFT JOIN stats_color col ON col.id = i.color
LEFT JOIN stats_google_zoekwoorden google ON google.stats_id = i.id
LEFT JOIN stats_msn_zoekwoorden msn ON msn.stats_id = i.id
LEFT JOIN stats_hits h ON h.id = i.eerste_hit
LEFT JOIN stats_pagina p ON p.id = h.pagina
LEFT JOIN antwoorden a ON a.id = p.idvandepagina
LEFT JOIN categories c ON c.id = p.idvandepagina
LEFT JOIN stats_zoeken z ON h.id = z.hitid
LEFT JOIN vraagstellers vs ON vs.hitid = (h.id - 1)
LEFT JOIN vragen v ON vs.id = v.id
LEFT JOIN admins ad ON ad.id = p.idvandepagina
ORDER BY i.id DESC LIMIT 0,30 |
Als ik EXPLAIN toepas krijg ik het volgende:
| table | type | possible_keys | key | key_len | ref | rows | Extra |
| i | ALL | 7109 | Using temporary; Using filesort | ||||
| brow | eq_ref | PRIMARY | PRIMARY | 4 | i.browser | 1 | |
| ref | eq_ref | PRIMARY | PRIMARY | 4 | i.referrer | 1 | |
| res | eq_ref | PRIMARY | PRIMARY | 4 | i.resolution | 1 | |
| os | eq_ref | PRIMARY | PRIMARY | 4 | i.OS | 1 | |
| bwver | eq_ref | PRIMARY | PRIMARY | 4 | i.version | 1 | |
| col | eq_ref | PRIMARY | PRIMARY | 4 | i.color | 1 | |
| ALL | 2232 | ||||||
| msn | ALL | 78 | |||||
| h | eq_ref | PRIMARY | PRIMARY | 4 | i.eerste_hit | 1 | |
| p | eq_ref | PRIMARY | PRIMARY | 4 | h.pagina | 1 | |
| a | eq_ref | PRIMARY | PRIMARY | 4 | p.idvandepagina | 1 | |
| c | eq_ref | PRIMARY | PRIMARY | 4 | p.idvandepagina | 1 | |
| z | ALL | 1045 | |||||
| vs | ALL | 95 | |||||
| v | eq_ref | PRIMARY | PRIMARY | 4 | vs.id | 1 | |
| ad | eq_ref | PRIMARY | PRIMARY | 4 | p.idvandepagina | 1 |
De query doet veel join's, maar dat komt door het normaliseren van de database. Is het normaal dat zo'n query er 23 seconden over doet?