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