Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk meningkatkan prestasi terpilih pada jadual MyISAM baris 15 juta yang ditukar kepada InnoDB

MySQL versi 8.0.32-0ubuntu0.20.04.2

Saya cuba meningkatkan prestasi SELECT, bukan memintas melaksanakan SELECT.

CREATE TABLE big_table (
pk INT AUTO_INCREMENT PRIMARY KEY,
field1 VARCHAR(255),
field2 VARCHAR(255),
field3 mediumtext,
field4 BIGINT,
KEY idx_field4 (field4)
) ENGINE=MyISAM CHARSET=utf8mb3;

Masukkan 15 juta baris.

SELECT COUNT(pk) FROM big_table;
+---------------+
| count(pk)     |
+---------------+
|      15911974 |
+---------------+
1 row in set (0.57 sec)

Tukar table big_table ENGINE=INNODB;

SELECT COUNT(pk) FROM big_table;
+---------------+
| count(pk)     |
+---------------+
|      15911974 |
+---------------+
1 row in set (10.23 sec)

**Tetapkan innodb_buffer_pool_size=8G (dari 128Mb) (mulakan semula MySQL)**

SELECT COUNT(pk) FROM big_table;
+---------------+
| count(pk)     |
+---------------+
|      15911974 |
+---------------+
1 row in set (1 min 18.67 sec)

P粉388945432P粉388945432410 hari yang lalu426

membalas semua(1)saya akan balas

  • P粉576184933

    P粉5761849332023-09-07 10:55:40

    Ternyata melaksanakan SELECT COUNT(PK) atau SELECT COUNT(*) pada jadual MyISAM tanpa klausa where adalah kes yang sangat istimewa kerana ia tidak mengira setiap baris dan oleh itu sangat pantas. Pertanyaan yang sama pada InnoDB adalah perlahan kerana ia benar-benar mengira setiap baris.

    Namun, sebaik sahaja klausa tempat mula dimainkan pada medan diindeks, InnoDB nampaknya mengatasi MyIsam. Nampaknya ini adalah 99% kes penggunaan...

    balas
    0
  • Batalbalas