En aquest tema, explorarem les millors pràctiques per escriure consultes SQL eficients, mantenibles i segures. Aquestes pràctiques són essencials per garantir que les teves aplicacions funcionin de manera òptima i que les dades es gestionin de manera segura i coherent.
- Escriure consultes clares i llegibles
1.1. Utilitza noms descriptius per a les taules i columnes
- Exemple:
En lloc de:SELECT first_name, last_name, email FROM customers;
SELECT fn, ln, em FROM cust;
1.2. Utilitza majúscules per a les paraules clau SQL
- Exemple:
SELECT first_name, last_name FROM customers WHERE city = 'Barcelona';
1.3. Indenta les consultes llargues per millorar la llegibilitat
- Exemple:
SELECT first_name, last_name, email FROM customers WHERE city = 'Barcelona' AND age > 30 ORDER BY last_name;
- Optimització de consultes
2.1. Utilitza índexs adequadament
- Els índexs poden millorar significativament el rendiment de les consultes, però també poden afectar negativament el rendiment de les operacions d'inserció, actualització i eliminació.
- Exemple:
CREATE INDEX idx_customers_city ON customers(city);
2.2. Evita les subconsultes innecessàries
- Les subconsultes poden ser lentes. Utilitza JOINs quan sigui possible.
- Exemple:
-- Subconsulta SELECT first_name, last_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders WHERE order_date > '2023-01-01'); -- JOIN SELECT c.first_name, c.last_name FROM customers c JOIN orders o ON c.customer_id = o.customer_id WHERE o.order_date > '2023-01-01';
2.3. Utilitza LIMIT per restringir el nombre de files retornades
- Això és especialment útil en aplicacions web per evitar carregar massa dades alhora.
- Exemple:
SELECT first_name, last_name FROM customers ORDER BY last_name LIMIT 10;
- Seguretat en SQL
3.1. Evita les injeccions SQL
- Utilitza consultes preparades i paràmetres en lloc de concatenar cadenes.
- Exemple en PHP:
$stmt = $pdo->prepare('SELECT first_name, last_name FROM customers WHERE email = :email'); $stmt->execute(['email' => $email]);
3.2. Gestiona els permisos d'usuari adequadament
- Assegura't que els usuaris només tinguin els permisos necessaris per a les seves tasques.
- Exemple:
GRANT SELECT, INSERT ON customers TO 'app_user';
- Mantenibilitat del codi
4.1. Documenta les teves consultes
- Afegeix comentaris per explicar consultes complexes.
- Exemple:
-- Selecciona els clients que han fet una comanda en l'últim any SELECT first_name, last_name FROM customers c JOIN orders o ON c.customer_id = o.customer_id WHERE o.order_date > '2022-01-01';
4.2. Utilitza vistes per a consultes complexes
- Les vistes poden simplificar l'accés a dades complexes i millorar la llegibilitat del codi.
- Exemple:
CREATE VIEW recent_orders AS SELECT c.first_name, c.last_name, o.order_date FROM customers c JOIN orders o ON c.customer_id = o.customer_id WHERE o.order_date > '2022-01-01';
- Consells addicionals
5.1. Evita les operacions costoses en les clàusules WHERE
- Les funcions en les clàusules WHERE poden impedir l'ús d'índexs.
- Exemple:
-- Evita SELECT * FROM orders WHERE YEAR(order_date) = 2023; -- Millor SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
5.2. Utilitza transaccions per a operacions múltiples
- Les transaccions garanteixen que les operacions múltiples es completin de manera atòmica.
- Exemple:
BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; COMMIT;
Conclusió
Seguint aquestes millors pràctiques, podràs escriure consultes SQL més eficients, segures i fàcils de mantenir. Recorda que la claredat i la seguretat són tan importants com el rendiment. Practica aquestes tècniques en els teus projectes diaris per convertir-te en un expert en SQL.
Curs de SQL
Mòdul 1: Introducció a SQL
Mòdul 2: Consultes bàsiques de SQL
Mòdul 3: Treballar amb múltiples taules
Mòdul 4: Filtratge avançat de dades
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web