Introduit dans 4D v14 R4
Les opérations SELECT DISTINCT effectuées via des instructions SQL ont été optimisées lorsqu'elles sont appliquées à une seule table et une seule colonne.
Typiquement, dans 4D v15 et suivantes, ce code sera exécuté plus rapidement :
Begin SQL
SELECT DISTINCT Names FROM Employees INTO :$Emp;
End SQL
Les instructions SQL SELECT combinées aux clauses GROUP BY et ORDER BY ont été optimisées dans différentes configurations :
- SELECT FROM GROUP BY ou SELECT FROM ORDER BY appliqué à une seule table,
- SELECT FROM GROUP BY ou SELECT FROM ORDER BY appliqué à plusieurs tables et utilisant des jointures internes (inner joins).
Les optimisations concernent uniquement les références de colonnes simples (pas les expressions).
Typiquement, dans 4D v15 et suivantes, les cas décrits ci-dessous seront exécutés plus rapidement :
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