Posts tagged: MySQL

Einführung in Business Intelligence mit Pentaho

Bevor ich nun groß einsteige, möchte ich vorweg noch eine Buchempfehlung aussprechen – Pentaho Solutions: Business Intelligence and Data Warehousing with Pentaho and MySQL – dieses Buch bietet dem Leser einen guten Einstieg in die Thematik Data Warehouse im Zusammenhang mit der Open Source BI-Suite Pentaho. Das Buch ist entsprechend des Informationsgehaltes relativ dick aber liest sich wirklich gut (englisch). Der Preis liegt bei etwa 40 Euro – das Geld ist aber gut investiert ;-) .

Was bedeutet Business Intelligence?
In der Praxis versteht man unter „Business Intelligence“ meistens die Automatisierung des Berichtswesens (Reporting). Die in den verschiedensten Systemen (ERP, CRM, Buchhaltung, etc.) anfallenden Unternehmensdaten werden genutzt, um unter verschiedenen Blickwinkeln die Situation des Unternehmens zu analysieren und gegebenenfalls bewerten zu können. Sicherlich könnte man eine Analyse der Unternehmenskennzahlen auch “zu Fuß” mittels etlicher Excel-Sheets und dem Einsatz von Pivot-Tabellen vornehmen. Der Aufwand steht jedoch in absolut keinem Verhältnis zum Nutzen. Mit der Vielzahl der eingesetzten Software-Systeme für die unterschiedlichsten Zwecke steigt natürlich auch die Komplexität. Mit Excel gelangt man hier recht schnell an die Grenzen, zumal das auswertbare Datenvolumen durch Excel sowieso begrenzt ist.
Read more »

Anzahl betroffener Datensätze unter Verwendung von Limit ermitteln (MySQL)

Sicherlich standet ihr auch schon einmal vor dem Problem, die Ergebnismenge einer SQL Abfrage einschränken zu müssen. Soweit ist alles unkritisch. Wird nun beispielsweise für eine Seitenauswahl (pagination 1, 2, 3, … etc.) die Gesamtanzahl der Datensätze benötigt, ist eine weitere Abfrage erforderlich, welche ohne Limit die Ergebnisse zählt (COUNT).

SQL   
  1. SELECT COUNT(*) FROM tabelle WHERE feld = 'suchwort'

Bei einfachen Abfragen ist diese Art des “countens” von Datensätzen kein Problem. Sind die Abfragen jedoch komplexer, so ist zum Zählen von Datensätzen die SQL Abfrage doch sehr oft um zu formulieren.

Die Lösung des Problems bietet MySQL selbst mit dem Befehl SQL_CALC_FOUND_ROWS.

SQL   
  1. SELECT SQL_CALC_FOUND_ROWS
  2. spalte1,
  3. spalte2
  4. FROM tabelle
  5. WHERE feld = 'suchwort'
  6. LIMIT 0, 10

SQL_CALC_FOUND_ROWS wird einfach vor die zu selektierenden Spalten gesetzt (Achtung ohne Komma) und wirkt sich abgesehen von der minimal schlechteren Performance zunächst nicht aus. Das Resultset besteht aus maximal 10 Datensätzen und  kann wie gehabt gefetcht werden. Durch eine weitere SQL Abfrage mit dem Befehl FOUND_ROWS wird anschließend die Anzahl aller gefundenen Datensätze ohne die Limitierung abgefragt.
SQL   
  1. SELECT FOUND_ROWS()

Diese Abfrage gibt genau einen Record (Datensatz) mit einem Tupel zurück und enthält die Anzahl gefundener Datensätze ohne Limitierung. Neben des Vorteils, dass die Abfrage nicht für das Zählen der Einträge umgeschrieben werden muss, ergibt sich oftmals jedoch ein minimaler Performancenachteil. Hier gilt es zwischen Komfort und Performance abzuwägen.

Mehr Informationen über SQL_CALC_FOUND_ROWS und FOUND_ROWS findet ihr in der offiziellen MySQL-Dokumentation.

Ein PHP Beispiel findet ihr im kompletten Beitrag. Read more »

Tags:

categories SQL