Introducido en 4D v14 R4
Las operaciones SELECT DISTINCT ejecutadas a través de instrucciones SQL se han optimizado cuando se aplican a una sola tabla y a una sola columna.
Típicamente, en 4D v15 y versiones posteriores, el siguiente código se ejecutará más rápido:
Begin SQL
SELECT DISTINCT Names FROM Employees INTO :$Emp;
End SQL
Introducido en 4D v14 R5
Las instrucciones SQL SELECT con cláusulas GROUP BY y ORDER BY han sido optimizadas en diferentes configuraciones:
- SELECT FROM GROUP BY o SELECT FROM ORDER BY aplicado a una sola tabla,
- SELECT FROM GROUP BY o SELECT FROM ORDER BY aplicado a varias tablas y el uso de combinaciones internas.
Las optimizaciones conciernen únicamente a las referencias de columnas simples (no expresiones).
Típicamente, en 4D v15 y versiones posteriores, los siguientes casos se ejecutarán más 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