sql >> Database >  >> RDS >> Oracle

hoe je willekeurige rijen in orakel sneller kunt selecteren met een tabel met miljoenen rijen

Gebruik van de juiste waarden van sample(x) is de snelste manier die je kunt. Het is blok-willekeurig en rij-willekeurig binnen blokken, dus als je maar één willekeurige rij wilt:

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

Ik gebruik een gesubpartitioneerde tabel en ik krijg een behoorlijk goede willekeur, zelfs als ik meerdere rijen grijp:

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

Ik vermoed dat je waarschijnlijk je SAMPLE . moet afstemmen clausule om een ​​geschikte steekproefomvang te gebruiken voor wat u ophaalt.



  1. Beste DBaaS-oplossingen voor PostgreSQL

  2. SQL Server 2005 Hoe creëer je een unieke beperking?

  3. sql cross join - wat voor nut heeft iemand er voor gevonden?

  4. Metagegevens met betrekking tot recordtypen op PL/SQL-pakketniveau