Oracle
 sql >> база данни >  >> RDS >> Oracle

как да направите избирането на произволни редове в oracle по-бързо с таблица с милиони редове

Използване на подходящи стойности на sample(x) е най-бързият начин, по който можете. Той е произволен по блокове и по редове в рамките на блокове, така че ако искате само един произволен ред:

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

Използвам подразделена таблица и получавам доста добра произволност дори при хващане на няколко реда:

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

Подозирам, че вероятно трябва да настроите своя SAMPLE клауза за използване на подходящ размер на извадката за това, което извличате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да решите ORA-02014:не може да избере ЗА АКТУАЛИЗИРАНЕ от изглед с DISTINCT, GROUP BY

  2. Преобразувайте всеки знак в низ в ред

  3. не е групова функция с MAX в select

  4. Актуализирайте и вмъкнете записи в таблицата на Oracle с помощта на OracleDataAdapter от DataTable

  5. Фонови процеси