- 论坛徽章:
- 0
|
解决方案
建表语句
CREATE TABLE `NPE_RECORD_2008081422` (
`DEVICE_IP` int(10) unsigned DEFAULT NULL,
`PROTOCOLIDENTIFIER` tinyint(3) unsigned DEFAULT NULL,
`APP_PROTOCOL` tinyint(3) unsigned DEFAULT NULL,
`SOURCEIPV4ADDRESS` int(10) unsigned DEFAULT NULL,
`DESTINATIONIPV4ADDRESS` int(10) unsigned DEFAULT NULL,
`SOURCETRANSPORTPORT` smallint(5) unsigned DEFAULT NULL,
`DESTINATIONTRANSPORTPORT` smallint(5) unsigned DEFAULT NULL,
`NAT_SRC_IP` int(10) unsigned DEFAULT NULL,
`NAT_DST_IP` int(10) unsigned DEFAULT NULL,
`NAT_SRC_PORT` smallint(5) unsigned DEFAULT NULL,
`NAT_DST_PORT` smallint(5) unsigned DEFAULT NULL,
`IN_OCTETS` int(10) unsigned DEFAULT NULL,
`OUT_OCTETS` int(10) unsigned DEFAULT NULL,
`FLOW_CREATE_TIME` int(10) unsigned NOT NULL,
`FLOW_DIE_TIME` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
PARTITION BY HASH(SOURCEIPV4ADDRESS)
PARTITIONS 64 (
PARTITION P1 DATA DIRECTORY='/home/mysql/DATA/NPE_RECORD/' INDEX DIRECTORY='/home/mysql/DATA/NPE_RECORD/',
PARTITION P2 DATA DIRECTORY='/home/mysql/DATA/NPE_RECORD/' INDEX DIRECTORY='/home/mysql/DATA/NPE_RECORD/'
...这里省略了很多分区路径
);
通过这样的hash分区, 速度得到了很大的改善, 个人认为原因是hash分区了以后, 每次做的硬盘扫描要少了很多, mysql只需要扫描查询条件的值对应的分区即可. 所以速度能够从15秒左右下降到0.xx秒.
另外我注意到一个现象, 即使查询条件中不包含分区列, 比如说如下查询:
mysql> SELECT * FROM NPE_RECORD_2008081512 WHERE NAT_DST_IP=3232242688;
查询时间也有比较大的下降, 从原来的15秒左右下降到5秒以内. 这个原因我个人认为是因为每个分区文件都很小, 只有25MB左右, mysql可以一次性将文件全部导入内存, 从而加快查询速度, 而原来不分区的时候, 一个MYD文件有2G左右,mysql无法一次性导入内存
以上纯属个人观点, 我对数据库不是很懂, 错了请大家指教.
ps. 谢谢大家的帮忙~~~
[ 本帖最后由 yj1804 于 2008-8-15 14:55 编辑 ] |
|