17 Avril 2018
Hello..
Entre deux versions, il y a parfois tellement de nouveautés que certaines ne nous apparaissent que plus tard, beaucoup plus tard...
Pas forcement qu'elles soient exceptionnelles... mais cependant, ll peut arriver de tomber sur une qui peut avoir le mérite de nous faire gagner du temps, ou dit autrement s'en y prendre garde faire quelque chose qui est déjà fait...
Or lorsqu'on parle de bases de données, on parle également souvent de problématique de performances..
Et quand on parle de problème de performance, une des premières choses qui nous vient à l'esprit (ou du moins qui devrait à mon sens) est d'éviter de faire quelque chose qui a déjà été fait...
Petit retour en arrière (quand même pas au moyen âge)... mais en 11.2.0.4
Que ce soit pour une application, ou pour des jeux de tests (pour le blog), il arrive fréquemment que nous soyons amenés à créer des tables de travail via un bon vieux CTAS (Create Table As Select).
Et une fois que l'on a crée la table... que fait-on.... Et bien on calcule les stats sur la dite table...
Et en fonction de la taille de la table, cela peut prendre un peu de temps.
Et oui lors de la création d'une table via un bon vieux CTAS, pas de stats...
Sur une un serveur en 11g..
SQL> SQL> select banner from v$version; BANNER -------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production SQL>
Création d'une table avec CTAS..
SQL> SQL> create table lao_test as select * from dba_tables; Table created. SQL
Vérifions ce que l'on a comme informations au niveau des stats pour la table.
SQL> SQL> set linesize 300 SQL> select table_name,num_rows,blocks,last_analyzed from dba_tables where table_name='LAO_TEST'; TABLE_NAME NUM_ROWS BLOCKS LAST_ANALYZED ---------- -------- ------ ------------ LAO_TEST SQL>
Je vous l'avais dit...
Mais voila qu'en 12c, va savoir pourquoi tout d'un coup je me suis posé la question... et je refais donc le même test.
SQL> column table_name for a20 SQL> set linesize 300 SQL> select table_name,num_rows,blocks,last_analyzed from dba_tables where table_name='LAO_TEST'; TABLE_NAME NUM_ROWS BLOCKS LAST_ANALYZED ---------- ---------- ------ ------------- LAO_TEST 2112 102 17-APR-18 SQL>