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

mysql:memilih kueri yang paling efisien dari keduanya

Tidak ada keraguan bahwa versi 1 - pisahkan di mana klausa di setiap sisi serikat pekerja - akan lebih cepat. Mari kita lihat mengapa versi - di mana klausa di atas hasil gabungan - lebih buruk:

  • volume data:akan selalu ada lebih banyak baris dalam hasil gabungan, karena ada lebih sedikit kondisi pada baris yang dikembalikan. Ini berarti lebih banyak I/O disk (bergantung pada indeks), lebih banyak penyimpanan sementara untuk menampung rowset, yang berarti lebih banyak waktu pemrosesan
  • pemindaian berulang:seluruh hasil penyatuan harus dipindai lagi untuk menerapkan kondisi tersebut, ketika hal itu dapat ditangani selama pemindaian awal. Ini berarti menangani dua baris rowset, meskipun mungkin dalam memori, tetap saja ini pekerjaan ekstra.
  • indeks tidak digunakan untuk klausa mana pada hasil gabungan. Jika Anda memiliki indeks di atas bidang kunci asing dan postType, itu tidak akan digunakan

Jika ingin performa maksimal, gunakan UNION ALL , yang meneruskan baris langsung ke hasil tanpa overhead, alih-alih UNION , yang menghapus duplikat (biasanya dengan menyortir) dan bisa mahal dan tidak perlu berdasarkan komentar Anda

Tentukan indeks ini dan gunakan versi 1 untuk kinerja maksimum:

create index t1_authorID_postType on t1(authorID, postType);
create index t1_websiteID_postType on t1(websiteID, postType);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Manipulasi Bit dan Pengambilan MySQL di PHP

  2. Menyimpan bilangan bulat yang sangat besar di MySQL

  3. Tidak dapat melewati parameter 2 dengan referensi - uuid PDO

  4. Cara mengatur batas waktu koneksi tergantung dari login pengguna di MySQL

  5. Penyimpanan gambar normal atau gumpalan mySQL?