今天介紹 Memory 儲存引擎.顧名思義就是將資料放到記憶體裡面,速度快.
MySQL的Memory 儲存引擎有以下特色:高速,不支持Transaction,
以Hash index 為主,也可以用 Btree index.
限制是:不能用 TEXT/BLOB 資料型態,row 是固定大小.
5.1 Memory 儲存引擎範例
有關之參數 max_heap_table_size.
-- 欲使用 200M 的 Memory,則可以用以下指令
SET SESSION max_heap_table_size = 1024 * 1024 * 200;
-- 建立一個使用 Memory 的 Table
CREATE TABLE filler(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=Memory;
-- 建立一個 Stored Procedure
DELIMITER $$
CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
DECLARE _cnt INT;
SET _cnt = 1;
WHILE _cnt <= cnt DO
INSERT
INTO filler
SELECT _cnt;
SET _cnt = _cnt + 1;
END WHILE;
END
$$
DELIMITER ;
-- 建立一個一百萬筆的序列
START TRANSACTION;
CALL prc_filler(1000000);
COMMIT;
-- 查看資料及空間使用情況
SELECT COUNT(id), MAX(id)
FROM filler;
+-----------+---------+
| COUNT(id) | MAX(id) |
+-----------+---------+
| 1000000 | 1000000 |
+-----------+---------+
1 row in set (0.06 sec)
SELECT table_name, table_rows, row_format,
ROUND(data_length / 1048576) AS 'data(M)',
ROUND(index_length / 1048576) AS 'index(M)'
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'filler';
+------------+------------+------------+---------+----------+
| table_name | table_rows | row_format | data(M) | index(M) |
+------------+------------+------------+---------+----------+
| filler | 1000000 | Fixed | 15 | 15 |
+------------+------------+------------+---------+----------+
5.2 用途討論
在實務應用上,像是作壓力測試,或是驗證修改參數的成效,或是開發系統時,在在都需要產生測試資料.而要產生測試資料時,數目是一個重點,例如一般常會使用一百萬筆資料,或是一千萬筆資料,而要產生這樣多的資料時,就可以利用 Memory 儲存引擎,先產生一個 filler table,再來作 JOIN,這樣就能夠快速的產生出測試資料.