![]() |
AW: Tabellenübergreifender Index
...in Verbindung mit kleineren Ergebnismengen (nur das holen was wirklich gebraucht wird)
Zitat:
|
AW: Tabellenübergreifender Index
Ansonsten muss eine Tabelle erstellt werden, die alle Ausgabefelder (und die IDs) beinhaltet und mittels Trigger gefüllt wird.
In dieser Tabelle kann dann der Index entsprechend den Sortierkriterien angepasst werden. Habe das mal spaßeshalber mit MySQL durchgespielt und die Antwortzeiten liegen beim JOIN-Select bei ca. 1.5 Sekunden und mit der Hilfstabelle bei 0.15 Sekunden. |
AW: Tabellenübergreifender Index
Wie verhält sich denn die Sortierung, wenn du es manuell machst?
Und eine Begründung könnte sein: Bei einer Sortierung geht Quicksort bei mehreren aber nur Mergesort (es war doch so, dass man bei order by die Sortierpriorität einstellte oder? Zuerst nach A dann darin alle nach B sortieren). MfG Fabian |
AW: Tabellenübergreifender Index
Die Änderung Sortierpriorität ergab bei MySQL keine anderen Zeitwerte.
Auch ein Index auf musik.titel und/oder interpret.name brachte da nix. Grund: MySQL legte die Abfrage in eine temp. Tabelle (bei 120000 Einträgen in Musik wurde die auch noch auf die Platte ausgelagert) und dann sortiert. Die Sortierung nimmt dann ca. 60-70% der gesamten Abfragezeit in Anspruch. Die zusammengeführte und über Trigger/Foreign-Key aktualisierte Tabelle mit den Ausgabewerten und natürlich den passenden Indizes für die gewünschten Sortierungen (IDX1=name,titel; IDX2=titel,name) ergibt trotz der 120000 Datensätze ein sehr schnelles Ergebnis. Ist zwar etwas Daten-Overhead aber meines Wissen nicht anders zu lösen, wenn es auf absolute Performance ankommt. |
AW: Tabellenübergreifender Index
Zitat:
Zitat:
Dank des Hinweises von DeddyH bin jetzt draufgekommen, dass man Indizes seit Firebird 2 doch auch nach Fremdtabellen berechnen kann (über computed by an Stelle einer Spaltenangabe). Allerdings beschleunigt das den Vorgang auch nicht nennenswert, obwohl ich nur die ersten 20 abrufe und ein Index vorhanden ist, geht Firebird über die ganze Tabelle. Zitat:
Wobei ich eher annehme, dass es dafür eine Lösung gibt, und dass ich nur nicht weiss, wie sie aussieht. Zitat:
|
AW: Tabellenübergreifender Index
Zitat:
Oder wenn man es verallgemeinert: ein Index ist immer an ein Recordset gebunden. Bei manchen DBMS (z.B. MS SQL Server) ist es auch möglich Indexe auf Views zu legen. Damit kann man einen Index als Verbund aus zwei oder mehr Felder aus verschiedenen Tabellen aufbauen. Rein theoretisch könnte man sich vorstellen, Indexe tabellenübergreifend zu erstellen. Aber man braucht dazu nicht nur die Tabellennamen sondern auch die relationale Beziehung der Tabellen. Hier mal der Versuch, diesen Index als SQL auszudrücken:
Code:
CREATE INDEX Test (TabelleA.Feld1, TabelleB.Feld2) TabelleA INNER JOIN TabelleB ON TabelleA.PKFeldA=TabelleB.PKFeldB
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz