Domanda

Di solito, ho bisogno di recuperare i dati da una tabella in un certo intervallo; ad esempio, una pagina separata per ogni risultato di ricerca. In MySQL utilizzo la parola chiave LIMIT ma in DB2 non lo so. Ora utilizzo questa query per recuperare l'intervallo di dati.

SELECT * 
FROM(
   SELECT  
      SMALLINT(RANK() OVER(ORDER BY NAME DESC)) AS RUNNING_NO
      , DATA_KEY_VALUE
      , SHOW_PRIORITY
   FROM 
      EMPLOYEE
   WHERE 
      NAME LIKE 'DEL%'
   ORDER BY
      NAME DESC
   FETCH FIRST 20 ROWS ONLY
) AS TMP
ORDER BY 
  TMP.RUNNING_NO ASC
FETCH FIRST 10 ROWS ONLY

ma so che è cattivo stile. Quindi, come richiedere le massime prestazioni?

È stato utile?

Soluzione

I miei requisiti sono già stati aggiunti in DB2 9.7.2.

DB2 9.7.2 aggiunge una nuova sintassi per il risultato della query limite come illustrato di seguito:

SELECT * FROM TABLE LIMIT 5 OFFSET 20

il database recupererà il risultato dalla riga n. 21 - 25

Altri suggerimenti

Non sono sicuro del motivo per cui stai creando la tabella TMP. RUNNING_NO non è in ordine crescente? Vorrei pensare:

SELECT SMALLINT(RANK() OVER(ORDER BY NAME DESC)) AS RUNNING_NO,
       DATA_KEY_VALUE,
       SHOW_PRIORITY
  FROM EMPLOYEE
 WHERE NAME LIKE 'DEL%'
 ORDER BY NAME DESC
 FETCH FIRST 10 ROWS ONLY

darebbe gli stessi risultati.

Avere un INDICE su NAME nella tabella DIPENDENTI migliorerà le prestazioni di questa query.

È molto difficile, dipende dal database che hai.

ad esempio:

SELECT * FROM ( 
    SELECT 
      ROW_NUMBER() OVER (ORDER BY ID_USER ASC) AS ROWNUM,  
      ID_EMPLOYEE, FIRSTNAME, LASTNAME 
    FROM EMPLOYEE 
    WHERE FIRSTNAME LIKE 'DEL%' 
  )  AS A WHERE A.rownum
BETWEEN 1 AND 25
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top