Rumah  >  Soal Jawab  >  teks badan

pengoptimuman mysql - mysql innodb dan kunci myisam

innodb


Adakah sisipan akan dikunci? Jika ia dikunci, apa gunanya?
Dalam kemas kini dan pemadaman innodb secara tersirat akan menambah kunci eksklusif,
kemas kini set jadual... di mana id dalam (1,2,3,4); ubah suai dan komit mengikut ID;

myisam


Adakah memadam dan mengemas kini secara tersirat menambah kunci tulis?
Pilih akan menambah kunci baca secara tersirat?
Jika ia ditambah dalam dua situasi, kedua-duanya adalah tahap kunci meja, maka konkurensi akan menjadi sangat teruk, bukan?

Pilihan dua enjin
MyISAM: Jika anda melaksanakan sejumlah besar PILIHAN, MyISAM ialah pilihan yang lebih baik Mengapa ini? Saya sebenarnya telah menguji 3.6 juta keping data, yang kesemuanya menggunakan pemilihan indeks jauh lebih cekap.

.

InnoDB: Jika data anda melakukan sejumlah besar INSERT atau UPDATE, anda harus menggunakan jadual InnoDB Adakah ini kerana kunci jadual myisam?

淡淡烟草味淡淡烟草味2729 hari yang lalu895

membalas semua(1)saya akan balas

  • 大家讲道理

    大家讲道理2017-05-24 11:36:38

    Terima kasih atas jemputan.

    InnoDB
    InnoDB hanya boleh mengunci pengepala jadual untuk INSERT, tetapi ia tidak akan mengunci keseluruhan jadual INSERT可能只锁表头吧,总之不会锁全表的;
    UPDATE(如果没有FOR UPDATELOCK IN SHARE MODE)和DELETE在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;
    一次UPDATE多行,肯定是多行一起锁,提交后一起释放的,因为MySQL要保证这条语句的原子性,当一条有主键冲突时,其他的也都不能提交了。

    MySQL
    UPDATEDELETE都会加写锁,而且锁全表;
    SELECT会加读锁,所以多个SELECT可以并发,但不能和UPDATEDELETE并发;
    INSERT的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECTINSERT可以并发。

    最后,MyISAM就SELECT而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED可能会比DYNAMICKEMASKINI (jika tiada UNTUK KEMASKINI atau LOCK IN SHARE MODE) dan DELETE akan menambah kunci tulis semasa pelaksanaan, kadangkala mengunci seluruh jadual, jadi ia akan menjejaskan prestasi serentak, tetapi ini hanya perkara sekejap. , jadi ia selalunya tidak kelihatan apabila concurrency tidak tinggi
    Berbilang baris KEMASKINI pada satu masa mesti dikunci bersama dan dilepaskan bersama selepas penyerahan, kerana MySQL mesti memastikan atomicity ini penyataan apabila seseorang mempunyai konflik kunci utama, yang lain tidak boleh diserahkan.

    MySQL🎜🎜KEMASKINI dan DELETE akan menambah kunci tulis dan mengunci keseluruhan jadual 🎜PILIH akan menambah kunci baca, jadi berbilang < kod; >PILIH boleh serentak, tetapi tidak boleh serentak dengan KEMASKINI dan DELETE 🎜INSERT's locking is a bit special, dan kekuatan kunci Ia mungkin antara kunci baca dan kunci tulis, dan boleh serentak dengan SELECT dan INSERT. 🎜 🎜Akhir sekali, prestasi MyISAM dari segi SELECT tidak akan jauh lebih baik daripada InnoDB Ia juga bergantung pada cara baris disimpan Sebagai contoh, FIXED MyISAM mungkin lebih baik daripada DINAMIK Lebih pantas. 🎜Selain itu, contoh anda pasti akan lebih bermanfaat kepada InnoDB: jika ia ditukar kepada indeks bukan kunci utama, maka InnoDB mungkin tidak begitu pantas jika hanya lajur id yang DIPILIH, maka MyISAM mungkin tidak begitu perlahan. Boleh cari sebab 🎜indeks berkelompok🎜. 🎜

    balas
    0
  • Batalbalas