Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle 10g Connect By Sebelumnya - Masalah Performa

Saya mencoba menciptakan kembali situasi Anda dan saya tidak dapat membuat Oracle menggunakan indeks dengan bijak. Saya yakin ada cara cerdas untuk melakukannya. Tetapi jika tidak ada orang lain di sini yang bisa mengetahuinya, di bawah ini adalah cara yang bodoh dan jelek.

Karena Anda hanya mendapatkan sejumlah level tertentu, Anda dapat membuat koneksi secara manual. Dapatkan level pertama, gabungkan itu ke level kedua (yang mendapat hasil dari salinan kueri pertama), gabungkan itu ke level ketiga (yang mendapat hasil dari salinan kueri kedua), dll. Saya hanya melakukan tiga level di sini, tetapi Anda dapat menyalin dan menempel untuk membuat yang keempat. Lebih sulit untuk digunakan karena id asli diulang berkali-kali, tetapi sangat cepat (0,005 detik di komputer saya dengan 1,6 juta catatan.)

--Original animal
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 0 "level" from animals where animal_id = '101'
union all
--Parents
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 1 "level" from animals
where animal_id = (select sire_animal_id from animals where animal_id = '101')
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 1 "level" from animals
where animal_id = (select dam_animal_id from animals where animal_id = '101')
union all
--Grand parents
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select sire_animal_id from animals
  where animal_id = (select sire_animal_id from animals where animal_id = '101')
)
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select dam_animal_id from animals
  where animal_id = (select sire_animal_id from animals where animal_id = '101')
)
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select sire_animal_id from animals
  where animal_id = (select dam_animal_id from animals where animal_id = '101')
)
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select dam_animal_id from animals
  where animal_id = (select dam_animal_id from animals where animal_id = '101')
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java SQLData - Transmisikan ke objek pengguna dengan daftar/array?

  2. Bagaimana saya bisa memperbarui data di bidang CLOB menggunakan>> kueri yang disiapkan <<dengan ODP (Oracle.DataAccess)?

  3. Oracle memperlakukan string kosong sebagai masalah NULL untuk programmer Java / JPA

  4. Contoh Kondisi Oracle IF

  5. Masalah Pemicu PL/SQL