2010-12-10 85 views
10

J'ai une table dans une base de données Oracle avec 15 champs. Cette table comportait 3500000 insertions. Je les ai tous supprimés.Exécution de requête lente dans une table vide. (après la suppression d'une grande quantité d'insertions)

delete 
from table 

Après cela, chaque fois que j'exécute une instruction select
je reçois une réponse très lente (7 sec), même si la table est vide. Je reçois une réponse normale uniquement dans le cas où je recherche en fonction d'un champ indexé.

Pourquoi?

Répondre

7

Comme le dit Gritem, vous devez comprendre haute marques d'eau etc

Si vous ne voulez pas truncate la table maintenant (parce que des données fraîches ont été insérées), utilisez alter table xyz shrink space documenté here pour 10g

-3

En SQL lorsque vous voulez effacer complètement une table, vous devez utiliser truncate au lieu de supprimer. Disons que vous avez votre table avec 3,5 millions de lignes et qu'il y a un index (identifiant unique) sur une colonne de bigint qui s'incrémente pour chaque ligne. Tronquer la table effacera complètement la table et réinitialisera l'index à 0. Delete n'effacera pas l'index et continuera à 3 500 001 lorsque l'enregistrement suivant sera inséré. Tronquer est aussi beaucoup plus rapide que supprimer. Lisez les articles ci-dessous pour comprendre les différences.

Lisez cet article Read this article qui explique la différence entre tronquer et supprimer. Il y a des moments pour utiliser chacun d'eux. Here est un autre article d'un point de vue Oracle.

+2

-1 pour appeler un index un 'identifiant unique', en mentionnant des index quand la question ne l'est pas, en parlant de 'bigint' dans une question Oracle, et en quelque sorte avoir votre réponse acceptée –

+0

Les trois réponses me satisfaisaient. J'ai accepté cette réponse car elle m'a fait comprendre plus clairement ce que je demandais et m'a donné 2 liens d'article pour le voir plus en détail. J'ai vérifié tous et trouvé la réponse plus complète que les autres. –