Envoyé par
Ikebukuro
1) Je ne comprends pas cette phrase : "Par exemple, avec deux tables de 100 millions de lignes, une jointure qui au final renvoie une ligne ne coutera que la lecture de 6 pages, ce qui est très peu"
J'ai tab1(col1, col2, col3) avec col1 en PK et tab2(col3, col4, col5) avec col3 en PK et que je fais un SELECT T1.col2, T1.col3, T2.col4 FROM tab1 T1, tab2 T2 WHERE T1.col3=T2.col3 AND T1.col1 = 500000;
Pour cet ordre SQL je comprends qu'il y a les opérations suivantes :
- parcours de l'index de tab1 sur col1 : lecture du bloc racine, des blocs branches puis du bloc feuille où se trouve col1=500000 et lecture du rowid. Je pense qu'on lit 4 blocs : racine + 2 branches + feuille pour un index de profondeur 4.
- lecture de la table tab1 par rowid pour récupérer col2 et col3. On lit un bloc.
- une fois col3 récupéré dans tab1, je parcours cette fois l'index de tab2 sur col3, soit le chemin racine, branches puis du bloc feuille où se trouve tab2.col3=tab1.col3 et lecture du rowid. Je pense qu'on lit 4 blocs : racine + 2 branches + feuille pour un index de profondeur 4.
- lecture de la table tab2 par rowid pour récupérer col4. On lit un bloc.
Pour une table de 100 000 000 de lignes, je trouve que le chiffre de 6 pages est très optimiste car moi j'en suis à 10... Par "page" tu entends "bloc Oracle" ou "bloc du système d'exploitation"?
Partager