Originalmente introduzido em 4D v14 R4
A partir de 4D v14 R4, as operações SELECT DISTINCT executadas através de instruções SQL foram otimizadas quando se aplicam a uma só tabela e a uma só coluna.
Tipicamente, em 4D v14 R4 e versões posteriores, o seguinte código será executado mais rápido:
Begin SQL
SELECT DISTINCT Names FROM Employees INTO :$Emp;
End SQL
Originalmente introduzido em 4D v14 R5
As sentenças SQL SELECT com cláusulas GROUP BY e ORDER BY foram otimizadas em diferentes configurações:
- SELECT FROM GROUP BY SELECT FROM ORDER BY aplicado a uma só tabela,
- SELECT FROM GROUP BY ou SELECT FROM ORDER BY aplicado a várias tabelas e o uso de combinações internas.
As otimizações concernem unicamente as referências de colunas simples (não expressões).
Tipicamente, em 4D v14 R5 e versões posteriores, os seguintes casos se executarão mais rápido:
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