Domanda

Ho una query SQL Informix che restituisce un set di righe. È stato leggermente modificato per la nuova versione del sito su cui stiamo lavorando e il nostro QA ha notato che la nuova versione restituisce risultati diversi. Dopo un'indagine, abbiamo scoperto che l'unica differenza tra due query era nel numero di campi restituiti.

Le clausole FROM, WHERE e ORDER BY sono identiche e i nomi delle colonne nella parte SELECT non hanno influenzato i risultati. È stato solo il numero di campi a causare il problema.

Qualche idea?

È stato utile?

Soluzione 2

Il motore SQL Informix utilizza gli indici nelle tabelle in base alle colonne che vogliamo recuperare. Quando abbiamo recuperato colonne diverse, abbiamo utilizzato indici diversi e quindi abbiamo ottenuto i risultati in ordine diverso.

Altri suggerimenti

L'aggiunta di - + ORDERED risolve il problema consentendo di ottenere i risultati in un ordine prevedibile ogni volta.

I collegamenti vanno alla descrizione di come funziona la direttiva http :? //publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp topic = / com.ibm.sqls.doc / sqls1144.htm

  

Utilizza la direttiva ORDERED order-order   per forzare l'ottimizzatore a unire le tabelle   o visualizzazioni nell'ordine in cui   appare nella clausola FROM di   query.

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;

Suppongo che per 'campi' intendi il numero di righe di dati di output? Nella mia esperienza, le persone usano "campi" e "colonne" come sinonimi. Dato che i nomi nell'elenco di selezione non sono cambiati, presumibilmente stavi ottenendo differenze solo nel numero di righe restituite.

Date le stesse tabelle, i dati di input e la query, le dimensioni e il contenuto del set di risultati dovrebbero essere gli stessi, indipendentemente dal piano di query o dalla versione del server. Il sequenziamento del set di risultati può essere diverso a meno che non si imponga un ordine sui risultati, ma ciò è legittimo in qualsiasi DBMS.

Se si ottengono diverse dimensioni di set di risultati, è probabile che si debba contattare l'assistenza tecnica IBM. Almeno uno dei set di risultati è sbagliato e i risultati sbagliati sono sempre seri.

Sebbene i suggerimenti possano aiutare le prestazioni, e la consulenza standard di "eseguire STATISTICHE AGGIORNAMENTO (con le opportune serie di opzioni)" di solito aiuta, né la presenza né l'assenza di indici dovrebbero alterare la serie di risultati quando i dati sottostanti sono stabili. (Se i dati cambiano, ci sono una varietà di problemi e complicazioni di cui preoccuparsi.)

Mi vengono in mente solo due spiegazioni per questo:

  1. Viene utilizzata una funzione aggregata, come COUNT (colonna DISTINCT) o
  2. Le colonne aggiuntive che vengono selezionate provengono da una tabella a cui si è unito OUTER

Comprendo che non desideri pubblicare le definizioni SQL e table, ma ciò rende difficile la diagnosi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top