Informix SQL-Abfrage: Zwei ähnliche Anfragen aus der Rückkehr zu unterschiedlichen Ergebnissen

StackOverflow https://stackoverflow.com/questions/305306

  •  08-07-2019
  •  | 
  •  

Frage

Ich habe eine Informix SQL-Abfrage, die einen Satz von Zeilen zurückgibt. Es wurde für die neue Version der Website leicht modifiziert wir gearbeitet haben und unsere QA bemerkt, dass die neue Version unterschiedliche Ergebnisse. Nach einer Untersuchung haben wir festgestellt, dass der einzige Unterschied zwischen zwei Abfragen in der Anzahl der Felder waren zurückgegeben.

FROM, WHERE und ORDER BY-Klauseln sind identisch und die Spaltennamen in der SELECT-Teil hatte keinen Einfluss auf die Ergebnisse. Es war nur die Anzahl der Felder, die das Problem verursacht hat.

Irgendwelche Ideen?

War es hilfreich?

Lösung 2

Die Informix SQL-Engine verwendet die Indizes auf den Tabellen auf den Säulen basieren wir abrufen möchten. Wenn verschiedene Spalten Abrufen wir verschiedene Indizes wurden mit Hilfe und damit die Ergebnisse in unterschiedlicher Reihenfolge zu bekommen.

Andere Tipps

Hinzufügen --+ ORDERED beitreten Ordnung Richtlinie behebt das Problem, indem Sie Ihre Ergebnisse in vorhersagbaren Reihenfolge jedes Mal erhalten.

Die Links gehen auf die Beschreibung der Funktionsweise der Richtlinie http : //publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp topic = / com.ibm.sqls.doc / sqls1144.htm

  

Mit der BESTELLT beitreten Ordnung Richtlinie   die Optimierer zu zwingen, Tabellen zu verknüpfen   oder Ansichten in der Reihenfolge, in der sie   erscheinen in der FROM-Klausel der   Abfrage.

SELECT --+ ORDERED
   name, title, salary, dname
FROM dept, job, emp WHERE title = 'clerk' AND loc = 'Palo Alto' 
   AND emp.dno = dept.dno 
   AND emp.job= job.job;

Ich nehme an, dass durch ‚Felder‘ die Anzahl der Zeilen der Ausgangsdaten bedeuten? Nach meiner Erfahrung nutzen, um Menschen ‚Felder‘ und ‚Spalten‘ als Synonyme. Da die Namen in der Auswahlliste nicht ändern, Sie vermutlich nur wurden Unterschiede in der Anzahl der zurückgegebenen Zeilen zu bekommen.

die gleichen Tabellen gegeben, Eingabedaten und Abfrage, die Größe und den Inhalt des Ergebnismenge sollte die gleiche, unabhängig von der Abfrage-Plan oder Server-Version sein. Die Sequenzierung des Ergebnismenge kann unterschiedlich sein, wenn Sie einen Auftrag über die Ergebnisse verhängen, aber das ist legitim in jedem DBMS.

Wenn Sie verschiedene Größen von Ergebnismengen werden immer, sollten Sie wahrscheinlich IBM Technical Support in Verbindung setzen. Mindestens eines des Ergebnismenge ist falsch, und falsche Ergebnisse sind immer ernst.

Obwohl Hinweise können die Leistung helfen, und die Standard-Beratung von ‚lief UPDATE STATISTICS (mit den entsprechenden Gruppen von Optionen)‘ in der Regel hilft, weder das Vorhandensein noch Fehlen von Indizes sollte die Ergebnismenge ändern, wenn die zugrunde liegenden Daten stabil ist. (Wenn die Daten zu ändern, gibt es eine Reihe von Problemen und Komplikationen zu befürchten.)

Ich kann mir denken, nur zwei Erklärungen:

  1. Eine Aggregatfunktion verwendet wird, wie COUNT (DISTINCT Spalte), oder
  2. Die zusätzlichen Spalten sind aus einer Tabelle ausgewählt werden, die in den äußeren verbunden

Ich verstehe Sie nicht möchten, die SQL-und Tabellendefinitionen veröffentlichen, aber das macht es schwer zu diagnostizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top