Wie mit dem höchsten Leistungsbereich von Daten in DB2 abzufragen?
-
06-07-2019 - |
Frage
Normalerweise brauche ich in einem gewissen Bereich Daten aus einer Tabelle abzurufen; beispielsweise eine separate Seite für jedes Suchergebnis. In MySQL verwende ich LIMIT Schlüsselwort aber in DB2 ich weiß es nicht. Jetzt benutze ich diese Abfrage für Datenbereich abgerufen werden.
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
, aber ich weiß, es ist schlechter Stil. So, wie für höchste Leistung abzufragen?
Lösung
Meine Forderung in DB2 9.7.2 bereits hinzugefügt wurde.
DB2 9.7.2 fügt neue Syntax für Grenzabfrageergebnis wie unten veranschaulichen:
SELECT * FROM TABLE LIMIT 5 OFFSET 20
Die Datenbank wird kein Ergebnis von Zeile abzurufen. 21 - 25
Andere Tipps
Nicht sicher, warum Sie die TMP-Tabelle erstellen. Ist das nicht RUNNING_NO in aufsteigender Reihenfolge aready? Ich würde denken:
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
würden die gleichen Ergebnisse liefern.
Ein Index über Namen auf der Tabelle EMPLOYEE Nachdem die Leistung dieser Abfrage steigern.
Es ist sehr schwierig, es ist abhängig, welche Datenbank Sie Sie haben.
Beispiel:
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