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);