Bagaimana untuk meningkatkan prestasi terpilih pada jadual MyISAM baris 15 juta yang ditukar kepada InnoDB
P粉388945432
P粉388945432 2023-09-06 19:30:08
0
1
452

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粉388945432
P粉388945432

membalas semua(1)
P粉576184933

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...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan