Cours Optimisation Requete
Cours Optimisation Requete
Exemple :
SELECT DISTINCT City FROM Customers;
WHERE
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
Exemple :
SELECT * FROM Customers
WHERE Country='Mexico';
AND & OR
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';
Attention au where
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg';
DELETE
DELETE FROM table_name
WHERE some_column=some_value;
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
SELECT column_name(s)
FROM table_name
LIMIT number;
LIKE
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
Example :
select AVG(ActualCost) from Production.TransactionHistory
SQL Function : COUNT ()
Syntax :
SELECT COUNT(column_name) FROM table_name
Example :
select COUNT(*) from Production.TransactionHistory
select COUNT(distinct ActualCost) from Production.TransactionHistory
SQL Function : FIRST ()
Syntax :
SELECT FIRST(column_name) FROM table_name;
The FIRST() function is only supported in MS Access.
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name ASC;//SQL Server
Example :
select MAX(ActualCost) from Production.TransactionHistory
SQL Function : MIN()
Syntax :
SELECT MIN (column_name) FROM table_name
Example :
select MIN (ActualCost) from Production.TransactionHistory
SQL Function : SUM()
Syntax :
SELECT SUM (column_name) FROM table_name
Example :
select SUM (ActualCost) from Production.TransactionHistory
SQL GROUP BY Statement
Syntax :
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
Example :
select SUM(ActualCost), t.ModifiedDate, t.Quantity
from Production.TransactionHistory t
group by
t.ModifiedDate, t.Quantity
SQL HAVING Clause
Syntax :
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
Example :
select SUM(ActualCost), t.ModifiedDate, t.Quantity
from Production.TransactionHistory t
group by
t.ModifiedDate, t.Quantity
having
SUM(ActualCost) > 100
SQL UCASE() Function
Syntax :
SELECT UPPER (column_name) FROM table_name
Example :
select UPPER (p.FirstName) from Person.Person p
DECLARE
@thedatetime2 datetime2(7),
@thedatetime datetime;
UN INDEX CLUSTERISÉ SIGNIFIE UN SEUL INDEX CLUSTERED PAR LE CI DOIT TOUJOURS ÊTRE
QUE VOUS INDIQUEZ À LA BASE TABLE UTILISÉ POUR LA PK
DE DONNÉES DE STOCKER SUR LE
DISQUE DES VALEURS PROCHES
LES UNES DES AUTRES (SUR LE
DISQUE). CELA PRÉSENTE
L’AVANTAGE D’ANALYSER / DE
RÉCUPÉRER RAPIDEMENT LES
ENREGISTREMENTS QUI SE
SITUENT DANS UNE PLAGE DE
VALEURS D’INDEX EN CLUSTER.
Avec un index non clusterisé, il existe une seconde liste qui
contient des pointeurs sur les lignes physiques. Vous pouvez
avoir plusieurs index non clusterisés, bien que chaque
nouvel index augmente le temps nécessaire pour écrire de
Clustered nouveaux enregistrements.
index and non Il est généralement plus rapide de lire à partir d'un index
clustered clusterisé si vous souhaitez récupérer toutes les colonnes.
Vous n'êtes pas obligé d'aller d'abord à l'index, puis à la
index table.
B-TREE ET BITMAP BITMAP EST UNE L'INDEX B-TREE EST UN B-TREE FONCTIONNE
SONT DEUX TYPES MÉTHODE INDEX CRÉÉ SUR DES MIEUX AVEC DE
D’INDEX UTILISÉS DANS D'INDEXATION COLONNES CONTENANT NOMBREUSES VALEURS
ORACLE. OFFRANT DES DES VALEURS TRÈS INDEXÉES DISTINCTES
AVANTAGES EN TERMES UNIQUES.
DE PERFORMANCES ET
D'ÉCONOMIE DE
STOCKAGE.
BITMAP FONCTIONNE
MIEUX AVEC DE
NOMBREUSES VALEURS
INDEXÉES DISTINCTES
Créer des index
On va exécuter la requête
suivante :
Afficher le plan d’exécution
A chaque fois qu’on trouve le RID on fait une recherche mais cette
requête retourne un résultat d’où le choix de nested loops
Le choix de l’optimiseur
Il y a pas de garanti que l’index sera utilisé
Découvrir le choix par l'optimiseur
Selon le nombre de lignes qui seront affectées par cette requête
l’optimiseur peut choisir n’est pas utilisé l’index
Si l’optimiseur estime que parcourir la table est moins couteux il va
utiliser cette stratégie sinon il utilise l’index
Donc l’index est utilisé si l’optimiseur estime (en fonction de nombre de
ligne) que l’index est sélective.
Découvrir le choix par l'optimiseur
Exécuter les requêtes suivantes et voir le plan d’exécution:
• select * from Person.Person3;
• select p.LastName from Person.Person3 p;
• select p.FirstName from Person.Person3 p;
Index couvrant
Il répond à tous les besoins de la requêtes:
Dans cette requête l’index n’est pas couvrant :
select * from Person.Person3 p where LastName = 'hernandez';
go
Réexécuter la commande :
select * from Person.test
where id=11
Ajouter un index clustered
Voir le plan d’exécution de cette requête :
select * from Person.test
Ajouter un index clustered
Exécuter cette requête :
drop index ind_test_id on Person.test;
go
Et puis
create unique clustered index cl_ind_test_id on Person.test (id)
go
Lorsqu’on crée un index clustered le mot clé « clustered » est
obligatoire
Ajouter un index clustered
Exécuter cette requête :
select * from Person.test
Go