如何提高轉換為 InnoDB 的 1500 萬行 MyISAM 表的選擇效能
P粉388945432
P粉388945432 2023-09-06 19:30:08
0
1
474

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% 的用例...

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板