Dienstag, 27. August 2013

SQL Datenbank besser nutzen

Das Thema bessere Ausnutzung einer Datenbank bleibt aktuell.

Hier einmal eine Abfrage die ich der Sqlite Seite entnommen habe:

SELECT
     blob.rid AS blobRid,
     uuid AS uuid,
     datetime(event.mtime,'localtime') AS timestamp,
     coalesce(ecomment, comment) AS comment,
     coalesce(euser, user) AS user,
     blob.rid IN leaf AS leaf,
     bgcolor AS bgColor,
     event.type AS eventType,
     (SELECT group_concat(substr(tagname,5), ', ')
        FROM tag, tagxref
       WHERE tagname GLOB 'sym-*'
         AND tag.tagid=tagxref.tagid
         AND tagxref.rid=blob.rid
         AND tagxref.tagtype>0) AS tags,
     tagid AS tagid,
     brief AS brief,
     event.mtime AS mtime
  FROM event CROSS JOIN blob
 WHERE blob.rid=event.objid
   AND (EXISTS(SELECT 1 FROM tagxref
                WHERE tagid=11 AND tagtype>0 AND rid=blob.rid)
        OR EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid
                   WHERE tagid=11 AND tagtype>0 AND pid=blob.rid)
        OR EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid
                   WHERE tagid=11 AND tagtype>0 AND cid=blob.rid))
 ORDER BY event.mtime DESC
 LIMIT 200;
 Sie zeigt sehr deutlich was mit besserer Ausnutzung gemeint ist.
Sqlite bemerkt dazu:

This query is not especially complicated, but even so it replaces hundreds or perhaps thousands of lines of procedural code. 

Und genau das ist der Punkt und der trifft voll in's Schwarze.
Extrem viele DB Konstruktionen und verwendete Abfragen sind in genauso vielen Opensource Titel absolut primitiv.
Die Folgen bedeuten hoher RAM Bedarf, hohe Generierungszeit und unterm Strich sehr viel weniger Besucher als als man vom Inhalt einer Website hätte erreichen können.

Ursachen sind immer gleich - die Entwickler kommen aus dem Hobby Bereich und haben einfach nicht das Wissen und auch nicht die Zeit um da tiefer einzusteigen.

Keine Kommentare: