Eingeführt mit 4D v14 R4
Die Operationen mit SELECT DISTINCT wurden optimiert, die in SQL Anweisungen auf eine einzelne Tabelle bzw. eine einzelne Spalte angewendet werden.
Hierzu ein gängiges Beispiel. Der folgende Code wird in 4D v15 und neuer schneller ausgeführt:
Begin SQL
SELECT DISTINCT Names FROM Employees INTO :$Emp;
End SQL
Eingeführt mit 4D v14 R5
Die SQL SELECT Anweisungen mit GROUP BY und ORDER BY wurden in verschiedenen Konfigurationen optimiert:
- SELECT FROM GROUP BY oder SELECT FROM ORDER BY für eine einzelne Tabelle,
- SELECT FROM GROUP BY oder SELECT FROM ORDER BY für mehrere Tabellen und mit "inner joins".
Die Optimierung gilt nur für einfache Spaltenreferenzen, nicht für Ausdrücke.
So wird in 4D v15 und neuer der folgende Code rascher ausgeführt:
- Nach Beispielen sortieren
Begin SQL
DROP TABLE IF EXISTS T1;
DROP TABLE IF EXISTS T2;
CREATE TABLE T1 (C1 INT);
CREATE TABLE T2 (C2 INT);
INSERT INTO T1(C1) VALUES (1);
INSERT INTO T1(C1) VALUES (2);
INSERT INTO T1(C1) VALUES (3);
INSERT INTO T2(C2) VALUES (2);
INSERT INTO T2(C2) VALUES (3);
End SQL
ARRAY LONGINT($result;0)
ARRAY LONGINT($result1;0)
ARRAY LONGINT($result2;0)
Begin SQL
SELECT C1
FROM T1, T2
WHERE C1=C2
ORDER BY C1
INTO :$result
End SQL
Begin SQL
SELECT C1, C2
FROM T1, T2
WHERE C1=C2
ORDER BY C1, C2
INTO :$result1, :$result2
End SQL
Begin SQL
SELECT C1 + 1
FROM T1, T2
WHERE C1=C2
ORDER BY C1
INTO :$result
End SQL
Begin SQL
SELECT C1
FROM T1, T2
WHERE C1=C2
ORDER BY 1
INTO :$result
End SQL
Begin SQL
DROP TABLE IF EXISTS T1;
DROP TABLE IF EXISTS T2;
CREATE TABLE T1 (C1 INT, C3 INT);
CREATE TABLE T2 (C2 INT);
INSERT INTO T1(C1, C3) VALUES (3, 1);
INSERT INTO T1(C1, C3) VALUES (1, 1);
INSERT INTO T1(C1, C3) VALUES (2, 1);
INSERT INTO T1(C1, C3) VALUES (3, 1);
INSERT INTO T1(C1, C3) VALUES (2, 1);
INSERT INTO T1(C1, C3) VALUES (3, 1);
INSERT INTO T2(C2) VALUES (2);
INSERT INTO T2(C2) VALUES (3);
End SQL
ARRAY LONGINT($result;0)
ARRAY LONGINT($result1;0)
ARRAY LONGINT($result2;0)
Begin SQL
SELECT C1
FROM T1, T2
WHERE C1=C2
GROUP BY C1
INTO :$result
End SQL
Begin SQL
SELECT C1, SUM(C3)
FROM T1, T2
WHERE C1=C2
GROUP BY C1
INTO :$result1, :$result2
End SQL