


Pengoptimuman pangkalan data: kesan prestasi OR keadaan dalam INNER JOIN
Dalam pengoptimuman pertanyaan pangkalan data, adalah penting untuk memahami kesan keadaan berbeza dalam kenyataan JOIN. Salah satu isu biasa ialah menggunakan syarat ATAU dalam INNER JOIN.
Pertimbangkan pertanyaan berikut:
SELECT mt.ID, mt.ParentID, ot.MasterID FROM dbo.MainTable AS mt INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID OR ot.ID = mt.ParentID
Pertanyaan ini akan mengambil masa beberapa minit untuk dilaksanakan pada mulanya. Selepas pemeriksaan lebih dekat, masalah ditentukan sebagai keadaan ATAU dalam Inner JOIN.
Untuk menyelesaikan masalah ini, pertanyaan telah ditulis semula untuk menggunakan sepasang LEFT JOIN:
SELECT mt.ID, mt.ParentID, CASE WHEN ot1.MasterID IS NOT NULL THEN ot1.MasterID ELSE ot2.MasterID END AS MasterID FROM dbo.MainTable AS mt LEFT JOIN dbo.OtherTable AS ot1 ON ot1.ParentID = mt.ID LEFT JOIN dbo.OtherTable AS ot2 ON ot2.ID = mt.ParentID WHERE ot1.MasterID IS NOT NULL OR ot2.MasterID IS NOT NULL
Pertanyaan yang dioptimumkan kini menyelesaikan pelaksanaan dalam kira-kira satu saat.
Menggunakan syarat ATAU dalam INNER JOIN akan menjejaskan prestasi pertanyaan dengan serius atas sebab berikut:
- Ia menghalang pengoptimum daripada menggunakan algoritma gabungan yang lebih cekap seperti HASH JOIN atau MERGE JOIN.
- Ia memaksa pengoptimum untuk menjana produk Cartesian, yang secara pengiraan mahal untuk meja besar.
Oleh itu, adalah lebih baik untuk menyatakan keadaan sedemikian menggunakan set hasil bercantum. Dalam contoh di atas, ini akan diterjemahkan kepada:
SELECT * FROM maintable m JOIN othertable o ON o.parentId = m.id UNION ALL SELECT * FROM maintable m JOIN othertable o ON o.id = m.parentId
Dengan menggunakan equijoins dan menggabungkan hasil, pengoptimum pertanyaan boleh melaksanakan operasi dengan cekap tanpa dikenakan penalti prestasi. Perhatikan penggunaan UNION ALL
di sini, gunakan UNION
jika anda perlu mengalih keluar baris pendua.
Atas ialah kandungan terperinci Mengapa Keadaan ATAU dalam Inner JOIN Menyebabkan Penalti Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

TODROPAVIEWInMYSQL, gunakan "dropviewififeXistsview_name;" andTomodifyAview, gunakan "createorreplaceviewview_nameasSelect ..."

Mysqlviewscaneffectivetyutilizedesignpatternslikeadapter, penghias, kilang, andobserver.1) adapterpaternaptsdatafromdifferenttablesintoaunifiedview.2)

ViewsinmysqlarebeneficialforsImplifingceMlexqueries, Enhancingsecurity, MemastikanDataconsistency, andoptimizingperformance

TOCREATEASIMPLEVIEWInMYSQL, USETHECreatEviewStatement.1) definetheViewWithCreateViewView_nameas.2)

TOCReateUsersinMysql, UsethecreateUserStatement.1) Foralocaluser: createuser'localuser '@' localhost'identifiedby'SecureShword '; 2) foraremoteuser: createuser'remoteuser'@'%'

Mysqlviewshavelimitations: 1) theDon'tsupportallsqloperations, bintikDatamanipulationThroughviewswithjoinsorsubqueries.2) merekacanimpactperformance, terutamanya dengan komplekssum

Betul -betul

Mysqldoes'timposeahardlimitontriggers, butpracticalfactorsDeterminetheirefectiveus


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft
