sql >> Database teknologi >  >> RDS >> Oracle

hvordan man gør valg af tilfældige rækker i oracle hurtigere med tabel med millioner af rækker

Brug passende værdier af sample(x) er den hurtigste måde du kan. Det er bloktilfældigt og rækketilfældigt inden for blokke, så hvis du kun vil have én tilfældig række:

select dbms_rowid.rowid_relative_fno(rowid) as fileno,
       dbms_rowid.rowid_block_number(rowid) as blockno,
       dbms_rowid.rowid_row_number(rowid) as offset
  from (select rowid from [my_big_table] sample (.01))
 where rownum = 1

Jeg bruger en underopdelt tabel, og jeg får ret god tilfældighed, selv når jeg griber flere rækker:

select dbms_rowid.rowid_relative_fno(rowid) as fileno,
       dbms_rowid.rowid_block_number(rowid) as blockno,
       dbms_rowid.rowid_row_number(rowid) as offset
  from (select rowid from [my_big_table] sample (.01))
 where rownum <= 5

    FILENO    BLOCKNO     OFFSET
---------- ---------- ----------
       152    2454936         11
       152    2463140         32
       152    2335208          2
       152    2429207         23
       152    2746125         28

Jeg formoder, at du nok skal justere din SAMPLE klausul for at bruge en passende stikprøvestørrelse til det, du henter.



  1. MySQL navngivningskonventioner, skal feltnavnet indeholde tabelnavnet?

  2. MYSQL inklusive værdier for datoer med nul vareantal

  3. mysql vælg sum gruppe efter dato

  4. Sådan fungerer current_time i PostgreSQL