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

Mengoptimalkan kueri MySQL di seluruh data hierarkis

Tanpa menghabiskan waktu untuk mengujinya, Anda memberikan contoh yang tidak lengkap? Anda harus mencoba menyusun ulang dari tabel yang digabungkan. Jelaskan output memberikan beberapa info, katakanlah memesan dengan key_len harus tercepat secara heuristik. Tabel pertama yang akan difilter harus terdaftar sebagai yang terakhir jika pengoptimal tidak dapat mengetahuinya, saya percaya.

Jadi, misalkan urutan 'c, v, k, u' adalah yang terbaik.

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
  `VertexDictionary`  AS `u`
  JOIN `SpecialKeys`       AS `k` ON (`k`.`x`, `k`.`key`) = (`u`.`x`, `u`.`key`)
  JOIN `VertexDictionary`  AS `v`
  JOIN `ConnectedVertices` AS `c` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
           AND (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
WHERE
  `v`.`x` = X
;

'baris' akan menyarankan urutan 'c/u, k, v', tetapi itu tergantung pada data:

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
  `VertexDictionary`  AS `u`
  JOIN `VertexDictionary`  AS `v`
  JOIN `SpecialKeys`       AS `k` ON (`k`.`x`, `k`.`key`) = (`u`.`x`, `u`.`key`)
  JOIN `ConnectedVertices` AS `c` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
                                 AND (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
 WHERE
  `v`.`x` = X
;

Semoga membantu.

PERBARUI (menghindari varchar bergabung):

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
       `ConnectedVertices` AS `c`
  JOIN `VertexDictionary`  AS `u` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
  JOIN `VertexDictionary`  AS `v` ON (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
WHERE
  (`u`.`x`, `u`.`key`) IN (SELECT `k`.`x`, `k`.`key` FROM `SpecialKeys` AS `k`)
AND
  `v`.`x` = X
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada opsi/fitur MySQL untuk melacak riwayat perubahan pada catatan?

  2. Perbedaan waktu rata-rata di mysql

  3. kelompokkan berdasarkan nilai bukan nol

  4. Karakter non bahasa Inggris muncul sebagai tanda tanya di halaman php saya - muncul baik-baik saja di database

  5. MySQL:gunakan kembali peningkatan otomatis selama penyisipan