Avatar billede aslan Nybegynder
28. juni 2006 - 11:19 Der er 6 kommentarer og
2 løsninger

Select bruger ikke index, skriver TABLE ACCESS FULL

Når jeg laver en select fra en tabel med where clause bruger den ikke index. Query'en bliver bare ved med at køre. Således ser explain plan ud på Sql'en:

SELECT STATEMENT Optimizer Mode=CHOOSE        666 K        59904                                   
  SORT ORDER BY        666 K    118 M    59904                                   
    PARTITION RANGE ALL                                     
      TABLE ACCESS FULL    INVOICE_DETAIL_LINE    666 K    118 M    41372 


Den skriver "TABLE ACCESS FULL", hvad betyder det?
Avatar billede teepee Nybegynder
28. juni 2006 - 12:03 #1
Har du et index? er der lavet stitistikker? hvis optimizeren tror at en full table scan er bedre så gør den det i stdet for index.
Avatar billede teepee Nybegynder
28. juni 2006 - 12:04 #2
Hvis indexet synes at være godt nok, så prøv lige følgende:
ANALYZE TABLE tabelnavn COMPUTE STATISTICS;
Avatar billede lbaad Nybegynder
28. juni 2006 - 12:31 #3
ellers kan du også lave et hint
select /*+ index(scott.emp ix_emp) */ from scott.emp emp_alias

så tvinger du sql'en til at bruge index'et
Avatar billede pgroen Nybegynder
28. juni 2006 - 13:00 #4
Må vi se select'en ?
- Ellers bliver det hele lidt abstrakt...
Avatar billede aslan Nybegynder
28. juni 2006 - 14:44 #5
Det virker når jeg laver en hint, men jeg kan ikke bruge den løsning fordi jeg ikke har adgang til java koden, der laver sql'en. Jeg kan ikke lave statistikker fordi tabellen indeholder millioner af rækker og det ville tage for lang tid måske senere i aften.

Selve sql'en er meget simpel, noget ala "select * from tabelNavn where kolonne=99999"

Jeg har tjekket at index på kolonnen eksisterer.
Avatar billede pgroen Nybegynder
28. juni 2006 - 15:16 #6
Ok, lad os se hvad der sker, efter du har lavet statistikker i aften
- For at se, om der måske allerede ER en brugbar statistik, så prøv:

SELECT num_rows, last_analyzed
  FROM user_tables
WHERE table_name = <dit tabelnavn>
Avatar billede aslan Nybegynder
28. juni 2006 - 16:04 #7
pgroen, det ser ikke ud til at der allerede er nogen brugbar statistik. Sql'en returnere ikke noget.
Avatar billede aslan Nybegynder
29. juni 2006 - 14:22 #8
Jeg løste det ved at slette index og så oprette den igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester