| c3 | date | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
MySQL> alter table part_tab drop column c2;
Query OK, 8000000 rows affected (42.20 sec)
Records: 8000000 Duplicates: 0 Warnings: 0
MySQL> desc part_tab;
+-------+---------+------+-----+---------+-------+
| FIEld | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c1 | int(11) | YES | | NULL | |
| c3 | date | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
MySQL> select count(*) from part_tab where
-> c3 > date '1995-01-01' and c3 < date '1995-12-31';
+----------+
| count(*) |
+----------+
| 795181 |
+----------+
1 row in set (0.34 sec)
在設計上去掉了VARCHAR字段後,不止是你,俺也發現查詢響應速度上獲得了另一個90%的時間節省。所以大家在設計表的時候,一定要考慮,表中的字段是否真正關聯,又是否在你的查詢中有用?
補充說明
這麼簡單的文章肯定不能說全MySQL 5.1 分區機制的所有好處和要點(雖然對自己寫文章水平很有信心),下面就說幾個感興趣的:
支持所有存儲引擎(MyISAM, Archive, InnoDB, 等等) 對分區的表支持索引,包括本地索引local indexes,對其進行的是一對一的視圖鏡像,假設一個表有十個分區,那麼其本地索引也包含十個分區。
關於分區的元數據Metadata的表可以在INFORMATION_SCHEMA數據庫中找到,表名為PARTITIONS。
All SHOW 命令支持返回分區表以及元數據的索引。 對其操作的命令和實現的維護功能有(比對全表的操作還多):
ADD PARTITION
DROP PARTITION
COALESCE PARTITION
REORGANIZE PARTITION
ANALYZE PARTITION
CHECK PARTITION
OPTIMIZE PARTITION
REBUILD PARTITION
REPAIR PARTITION
站在性能主導的觀點上來說,MySQL
5.1的分區功能能給數據性能帶來巨大的提升的同時減輕DBA的管理負擔,如果分區合理的話。如果需要更多的資料可以去http://dev.MySQL.com/doc/refman/5.1/en/partitioning.Html或
http://forums.MySQL.com/list.PHP?106獲得相關資料。