mysql56> CREATE TABLE t3 (num int) Engine= MyISAM;
Query OK, 0 rows affected (0.01 sec)
mysql56> INSERT INTO t3 VALUES (2);
Query OK, 1 row affected (0.01 sec)
mysql56> INSERT INTO t3 VALUES (1);
Query OK, 1 row affected (0.00 sec)
mysql56> SELECT * FROM t3;
+------+
| num |
+------+
| 2 |
| 1 |
+------+
2 rows in set (0.00 sec)
- MyISAMは.MYDファイル上に並んでいる順番で返るので、INSERTした順で返ってくる、ただし。
mysql56> DELETE FROM t3 WHERE num = 2;
Query OK, 1 row affected (0.00 sec)
mysql56> INSERT INTO t3 VALUES (3);
Query OK, 1 row affected (0.00 sec)
mysql56> SELECT * FROM t3;
+------+
| num |
+------+
| 3 |
| 1 |
+------+
2 rows in set (0.00 sec)
- DELETEによって隙間ができた場合、可能な限りそこを再利用してしまうので、運用中のデータが.MYDファイル上でどんな順番になっているかを判断することは現実的に不可能。
- 行がvarchar型のカラムを含んでいた場合はなおさら不可能。
mysql56> CREATE TABLE t4 (num int PRIMARY KEY) Engine= MyISAM;
Query OK, 0 rows affected (0.01 sec)
mysql56> INSERT INTO t4 VALUES (2);
Query OK, 1 row affected (0.00 sec)
mysql56> INSERT INTO t4 VALUES (1);
Query OK, 1 row affected (0.00 sec)
mysql56> SELECT * FROM t4 IGNORE INDEX(PRIMARY);
+-----+
| num |
+-----+
| 2 |
| 1 |
+-----+
2 rows in set (0.00 sec)
- MyISAMのテーブルスキャンの場合、Primary Keyの有無にかかわらず同じ動作。