Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:set bersarang lambat?

IME, MySQL tidak bekerja dengan baik dalam mengoptimalkan sub-kueri - khususnya tampaknya tidak mengelola predikat-push.

Saya sedikit bingung tentang apa yang sebenarnya dimaksudkan untuk dikembalikan oleh kueri - terutama 'sub-induk'

Anda akan mendapatkan beberapa peningkatan dengan menempatkan left_id dan right_id ke dalam satu indeks.

Meskipun Anda juga akan mendapatkan beberapa peningkatan dengan membuka gulungan kueri ke dalam prosedur tersimpan, mengingat bahwa Anda tampaknya melintasi hampir seluruh kumpulan data setiap kali solusi yang lebih baik adalah dengan mendenormalisasi kedalaman pohon dan menyimpannya sebagai atribut untuk setiap simpul. Memang Anda tampaknya melintasinya setidaknya dua kali di kueri luar saja.

Namun saya perhatikan bahwa di akhir kueri:

HAVING depth > 0
   AND depth <= 1

Yang pastinya sama dengan

HAVING depth=1

Yang kemudian memberikan cara yang sangat berbeda untuk mengoptimalkan kueri (mulai dengan mendapatkan semua node di mana right=left+1 untuk menemukan node tanpa anak dan mencari cara untuk memeriksa id kategori).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan baris acak untuk hari ini?

  2. MYSQL Inner Join if pernyataan

  3. Pilih nilai dari tabel tertentu dengan klausa `where` di tabel lain

  4. Kueri dengan parameter MySQL

  5. bagaimana cara mengimpor file csv ke mysql dari aplikasi hibernate+spring?