如何提高转换为 InnoDB 的 1500 万行 MyISAM 表的选择性能
P粉388945432
P粉388945432 2023-09-06 19:30:08
0
1
389

MySQL版本8.0.32-0ubuntu0.20.04.2

我正在尝试提高 SELECT 性能,而不是规避执行 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;

插入 1500 万行。

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

更改表big_table ENGINE=INNODB;

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

**设置 innodb_buffer_pool_size=8G (原为 128Mb)(重新启动 MySQL)**

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

P粉388945432
P粉388945432

全部回复 (1)
P粉576184933

事实证明,在没有 where 子句的 MyISAM 表上执行 SELECT COUNT(PK) 或 SELECT COUNT(*) 是一种非常特殊的情况,因为它不会计算每一行,因此速度非常快。 InnoDB 上的相同查询很慢,因为它确实计算每一行。

然而,一旦 where 子句在索引字段上发挥作用,InnoDB 的性能似乎就超过了 MyIsam。看来这是 99% 的用例......

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!