Sélection de MIN et MAX De la Table est plus lent que prévu

J'ai une table MYTABLE avec une colonne de date SDATE qui est la clé primaire de la table et a un index unique sur elle.

Lorsque j'exécute cette requête:

SELECT MIN(SDATE) FROM MYTABLE

il donne la réponse instantanément. Le même phénomène se produit pour:

SELECT MAX(SDATE) FROM MYTABLE

Mais, si j'ai une requête à la fois ensemble:

SELECT MIN(SDATE), MAX(SDATE) FROM MYTABLE

il prend beaucoup plus de temps à s'exécuter. J'ai analysé les plans et trouvé lorsque l'un des min ou max est interrogé, il utilise des INDEX FULL SCAN(MIN/MAX), mais quand les deux sont interrogés dans le même temps, il fait un FULL TABLE SCAN.

pourquoi?

Données De Test:

version 11g

create table MYTABLE
(
  SDATE  DATE not null,
  CELL   VARCHAR2(10),
  data NUMBER
)
tablespace CHIPS
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

alter table MYTABLE
  add constraint PK_SDATE primary key (SDATE)
  using index 
  tablespace SYSTEM
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

De la table de chargement:

declare 
  i integer;
begin
  for i in 0 .. 100000 loop
     insert into MYTABLE(sdate, cell, data)
     values(sysdate - i/24, 'T' || i, i);     
     commit;
  end loop;
end;

Recueillir des statistiques:

begin
  dbms_stats.gather_table_stats(tabname => 'MYTABLE', ownname => 'SYS');
end;

Plan 1:

Sélection de MIN et MAX De la Table est plus lent que prévu

Plan2:

Sélection de MIN et MAX De la Table est plus lent que prévu

  • Le nombre de lignes dans la table? Comment les frais sont les statistiques?
  • Ma table a presque 100000 lignes et les stats sont frais; vous pouvez facilement re-générer le problème par la création d'un tableau simple avec seulement un ou deux colonnes et de voir les résultats pour vous-même.
  • quels sont les coûts pour les requêtes? pouvez-vous poster les plans? Je pense que l'index est très fragmenté.
  • tablespace SYSTEM? veuillez essayer un autre.
  • C'est mon petit environnement de test donc je n'ai pas le SYSTÈME de soins de tablespace. mais de toute façon la même chose qui se passe sur la production de la table.
  • Merci de ne pas prendre de mauvaises habitudes: (1) Ne pas créer des objets dans le schéma SYS, jamais. (2) ne s'engagent pas dans une boucle.
  • Je vais prendre vos conseils!!! Merci. 🙂

InformationsquelleAutor RGO | 2012-09-24