Rumah  >  Artikel  >  pangkalan data  >  Apakah pertanyaan menyertai mysql dan kaedah pertanyaan berbilang?

Apakah pertanyaan menyertai mysql dan kaedah pertanyaan berbilang?

PHPz
PHPzke hadapan
2023-06-02 16:29:16949semak imbas

    Perbandingan antara pertanyaan penyertaan dan berbilang pertanyaan

    Adakah pertanyaan berkaitan berbilang jadual MySQL lebih cekap atau pertanyaan berbilang jadual tunggal?

    Apabila jumlah data tidak cukup besar, tiada masalah untuk menggunakan gabungan, tetapi ia biasanya dilakukan pada lapisan perkhidmatan

    Pertama: Pengkomputeran pangkalan data bersendirian sumber adalah sangat mahal, dan pangkalan data memerlukan Perkhidmatan menulis dan membaca kedua-duanya memerlukan penggunaan CPU Untuk meningkatkan daya pemprosesan pangkalan data, dan perniagaan tidak mengambil berat tentang jurang kelewatan ratusan mikrosaat hingga milisaat, perniagaan akan meletakkan lebih banyak. pengiraan ke dalam lapisan perkhidmatan Lagipun, sumber Pengkomputeran mudah dikembangkan secara mendatar, tetapi pangkalan data adalah sukar, kebanyakan perniagaan akan meletakkan operasi pengkomputeran tulen ke dalam lapisan perkhidmatan, dan menggunakan pangkalan data sebagai sistem kv dengan keupayaan transaksi idea seni bina DB yang berfokuskan perniagaan dan berwajaran ringan pangkalan data Tiada cara untuk bergabung di antara mereka Sememangnya, perniagaan akan mengabstrak lapisan perkhidmatan untuk mengurangkan gandingan kepada pangkalan data.

    Ketiga: Bagi sesetengah syarikat besar, disebabkan oleh skala data yang besar, mereka perlu sub-pangkalan data dan sub-jadual Untuk aplikasi sub-pangkalan data dan sub-jadual, penggunaan gabungan juga tertakluk kepada banyak sekatan, melainkan perniagaan boleh dijalankan dengan baik berdasarkan Kekunci sharding menjelaskan bahawa kedua-dua jadual yang akan disertai berada dalam pangkalan data fizikal yang sama. Middleware secara amnya tidak menyokong gabungan silang pangkalan data dengan baik.

    Untuk memberikan contoh perniagaan yang sangat biasa, dalam sub-pangkalan data dan sub-jadual, dua jadual perlu dikemas kini secara serentak Kedua-dua jadual terletak di perpustakaan fizikal yang berbeza untuk memastikan konsistensi data, satu Caranya adalah dengan menggunakan Perisian tengah transaksi yang diedarkan meletakkan dua operasi kemas kini ke dalam satu transaksi, tetapi operasi sedemikian secara amnya memerlukan kunci global, yang mengakibatkan prestasi yang lemah Walau bagaimanapun, sesetengah perniagaan boleh bertolak ansur dengan ketidakkonsistenan data jangka pendek. Biarkan mereka dikemas kini secara berasingan, tetapi akan ada masalah kegagalan penulisan data, kemudian mulakan tugas yang dijadualkan, imbas jadual A untuk baris yang gagal, dan kemudian lihat jika jadual B juga berjaya ditulis, dan kemudian pasangkan kedua-dua persatuan. Semasa menyemak rekod, adalah mustahil untuk menggunakan gabungan untuk melaksanakannya. Data hanya boleh ditarik ke lapisan perkhidmatan dan aplikasi itu sendiri menggabungkannya. . .

    Malah, membina semula pertanyaan dengan menguraikan pertanyaan yang berkaitan mempunyai kelebihan berikut:

    Menjadikan caching lebih cekap.

    Banyak aplikasi boleh cache objek hasil yang sepadan dengan pertanyaan jadual tunggal dengan mudah. Di samping itu, untuk cache pertanyaan MySQL, jika jadual dalam persatuan berubah, cache pertanyaan tidak boleh digunakan Selepas pemisahan, jika jadual jarang berubah, pertanyaan berdasarkan jadual boleh diulang.

    Selepas memecahkan pertanyaan, melaksanakan satu pertanyaan boleh mengurangkan perbalahan kunci.

    Membuat perkaitan pada lapisan aplikasi memudahkan pembahagian pangkalan data dan mencapai prestasi tinggi serta kebolehskalaan.

    Kecekapan pertanyaan itu sendiri juga mungkin dipertingkatkan

    Pertanyaan yang boleh mengurangkan rekod berlebihan.

    Selain itu, ini adalah bersamaan dengan melaksanakan perkaitan cincang dalam aplikasi dan bukannya menggunakan perkaitan cincin bersarang MySQL Dalam sesetengah senario, perkaitan cincang adalah lebih cekap.

    Pernyataan pertanyaan bergabung, hidup, di mana urutan pelaksanaan

    Jujukan pelaksanaan MySQL

    1 Urutan pelaksanaan lengkap pernyataan SELECT biasa

    1) dari. sub Ayat mengumpulkan data daripada sumber data yang berbeza;

    2) Gunakan pada untuk menapis data untuk menyambung sambungan

    3) Di mana klausa menyaring baris berdasarkan syarat yang ditetapkan; ) Kumpulan mengikut klausa membahagikan data kepada berbilang kumpulan;

    5) kubus, gulung

    6) Gunakan fungsi agregat untuk pengiraan; pengumpulan;

    8) Kira semua ungkapan;

    9) Kira medan pilihan; untuk mengisih set keputusan.

    12) Pilih data TOPN

    2. daripada

    Jika perkaitan adalah daripada jadualA, jadualB, kedua-dua jadual ini akan disusun dahulu untuk produk Cartesian, dan kemudian Lakukan operasi berikut seperti di mana dan kumpulan mengikut.

    3. pada

    Jika anda menggunakan sambung kiri, sambung dalam atau sambung penuh luar, gunakan pada untuk menapis syarat dan kemudian serta.

    Lihat 2 sql berikut dan hasil. Perbezaan antara keduanya terletak pada kedudukan selepas penyataan on dan where. Mula-mula gunakan pada untuk penapisan bersyarat, kemudian lakukan operasi gabungan, dan kemudian gunakan di tempat penapisan bersyarat.

    Gunakan join untuk menyambung dahulu, dan kemudian gunakan pada untuk menapis, yang akan membentuk produk Cartesian. Tiada perbezaan antara sambung kiri dan sambung langsung. Jadi anda mesti menapis terlebih dahulu dengan syarat dan kemudian menyertai.

    Jika operasi JOIN dilakukan selepas WHERE dan ke atas ON, hasil dua pertanyaan SQL berikut hendaklah sama. Ia boleh dilihat bahawa di mana penapisan untuk set selepas bergabung.

    Ringkasnya: mula-mula lakukan pada penapisan syarat, kemudian sertai, dan akhirnya lakukan di mana penapisan

    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain AND b.date = ‘20160403'
    WHERE a.date = ‘20160403'

    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain #and b.date = ‘20160403'
    WHERE a.date = ‘20160403'
    AND b.date = ‘20160403'

    Apakah pertanyaan menyertai mysql dan kaedah pertanyaan berbilang?

    四、on 条件与where 条件

    1、使用位置

    • on 条件位置在join后面

    • where 条件在join 与on完成的后面

    2、使用对象

    • on 的使用对象是被关联表

    • where的使用对象可以是主表,也可以是关联表

    3、选择与使用

    主表条件筛选:只能在where后面使用。

    被关联表,如果是想缩小join范围,可以放置到on后面。如果是关联后再查询,可以放置到where 后面。

    如果left join 中,where条件有对被关联表的 关联字段的 非空查询,与使用inner join的效果后,在进行where 筛选的效果是一样的。不能起到left join的作用。

    五、join 流程

    在表A和表B的联接中,从A表中选出一条记录,并将其传递到B表进行扫描和匹配。所以A的行数决定查询次数,B表的行数决定扫描范围。需要运行100次从A表中取出一条数据,然后进行200次比对,将结果存储到B表中。

    相对来说从A表取数据消耗的资源比较多。所以尽量tableA选择比较小的表。同时缩小B表的查询范围。

    但是实际应用中,因为二者返回的数据结果不同,使用的索引也不同,导致条件放置在on 和 where 效率是不一定谁更好。要根据需求来确定。

    Atas ialah kandungan terperinci Apakah pertanyaan menyertai mysql dan kaedah pertanyaan berbilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam