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

Di mysql, inner join sql mana yang paling efektif dan terbaik?

Semua itu secara fungsional setara. Bahkan pemisahan antara klausa WHERE dan kondisi JOIN tidak akan mengubah hasil saat bekerja sepenuhnya dengan INNER join (bisa jadi masalah dengan OUTER joins). Selain itu, semua itu harus bekerja dalam rencana kueri yang sama persis (secara efektif nol perbedaan kinerja). Urutan di mana Anda memasukkan item tidak masalah . Mesin kueri bebas untuk dioptimalkan karena dianggap paling sesuai dengan spesifikasi fungsional kueri. Bahkan ketika Anda mengidentifikasi perilaku tertentu sehubungan dengan pesanan, Anda tidak boleh mengandalkannya. Spesifikasi memungkinkan patch besok untuk mengubah perilaku hari ini di area ini. Ingat:inti dari SQL adalah berbasis set dan deklaratif :Anda memberi tahu database apa Anda ingin melakukannya, bukan bagaimana Anda ingin melakukannya.

Sekarang setelah kebenaran dan kinerja tidak ada lagi, kami beralih ke masalah gaya:hal-hal seperti produktivitas programmer dan keterbacaan/pemeliharaan kode. Dalam hal itu, opsi #4 dalam daftar itu sejauh ini pilihan terbaik, dengan #3 yang terbaik berikutnya, terutama saat Anda mulai masuk ke kueri yang lebih rumit. Hanya saja, jangan gunakan A,B sintaks lagi; sudah usang sejak versi standar SQL tahun 1992. Selalu tuliskan INNER JOIN yang lengkap (atau LEFT JOIN /RIGHT JOIN /CROSS JOIN dll).

Semua yang dikatakan, sementara urutan tidak (atau, setidaknya, seharusnya) tidak masalah dengan kinerja, saya merasa terbantu ketika saya menulis SQL untuk menggunakan konvensi dalam pendekatan saya yang mendikte urutan. Ini membantu saya mengidentifikasi kesalahan atau asumsi yang salah nanti saat debugging dan pemecahan masalah. Panduan umum yang saya coba ikuti ini adalah untuk berperilaku seolah-olah urutannya penting, dan kemudian dengan mengingat hal itu, cobalah untuk menjaga set memori kerja yang dibutuhkan oleh database untuk memenuhi kueri sekecil mungkin selama mungkin:mulai dengan tabel yang lebih kecil terlebih dahulu dan kemudian bergabung dengan yang lebih besar; saat mempertimbangkan ukuran tabel, pertimbangkan kondisi dalam klausa WHERE yang cocok dengan indeks; lebih suka gabungan bagian dalam sebelum bagian luar ketika Anda memiliki pilihan; daftar kondisi join untuk mendukung indeks (terutama kunci utama/cluster) terlebih dahulu, dan kondisi lain pada join kedua.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transaksi database di Zend Framework:Apakah mereka terisolasi?

  2. Mengeluarkan judul Kolom dalam Ekspor CSV

  3. Fungsi rekursif PHP untuk menghapus semua node anak menyebabkan stackoverflow

  4. Nilai BUKAN NULL di codeigniter

  5. LOAD DATA INFILE LOKAL php mysql