Mysql Merge 引擎分表方式
测试表news表,数据量大小为150w左右,测试步骤如下
1.创建第一张表news1, nsid <750000的数据保存在news1;
CREATE TABLE `news3` (
`NSID` int(11) NOT NULL,
`NewsName` varchar(100) NOT NULL,
`Title` varchar(100) NOT
NULL,
`Content` mediumtext NOT NULL,
`NID` int(11) NOT
NULL,
`NIP` varchar(100) NOT NULL,
`Editor` varchar(50) NOT
NULL,
`Status` smallint(6) NOT NULL,
`CityID` int(11) NOT
NULL,
`CTime` datetime NOT NULL,
`OrderNum` int(11) NOT
NULL,
`LogoID` int(11) NOT NULL,
`SignTag` varchar(50) NOT
NULL,
`Summary` varchar(5000) DEFAULT NULL,
`Type`
smallint(6) NOT NULL,
`PageNum` int(11) NOT NULL,
`Own`
int(11) NOT NULL,
`KeyWord` varchar(200) DEFAULT NULL,
`WySupport` int(11) NOT NULL DEFAULT ‘0‘,
`NewEditor` varchar(20)
DEFAULT ‘‘,
`Source` varchar(200) DEFAULT ‘‘,
`RemoteID`
varchar(100) DEFAULT NULL,
`BatchId` int(11) NOT NULL DEFAULT
‘0‘,
`UTime` datetime DEFAULT NULL COMMENT ‘修改时间‘,
`isTop`
int(11) NOT NULL DEFAULT ‘0‘,
`EndTime` datetime DEFAULT NULL COMMENT
‘置顶到期时间‘,
`IsComment` smallint(6) DEFAULT ‘0‘,
`BID` int(11)
NOT NULL DEFAULT ‘0‘,
`VTimes` int(11) NOT NULL,
`Tags`
varchar(1000) DEFAULT NULL,
PRIMARY KEY (`NSID`),
KEY
`CTime` (`CTime`),
KEY `OrderNum` (`OrderNum`),
KEY `NID`
(`NID`),
KEY `NewsName` (`CTime`),
KEY `IsComment`
(`BID`),
KEY `RemoteID` (`RemoteID`),
KEY `CityID`
(`CityID`,`CTime`,`WySupport`,`Type`,`Status`)
) ENGINE=MyISAM
AUTO_INCREMENT=635147 DEFAULT CHARSET=utf8
2.创建第二张表news4,nsid>=750000的数据保存在news4;
CREATE TABLE `news4` (
`NSID` int(11) NOT NULL,
`NewsName` varchar(100) NOT NULL,
`Title` varchar(100) NOT
NULL,
`Content` mediumtext NOT NULL,
`NID` int(11) NOT
NULL,
`NIP` varchar(100) NOT NULL,
`Editor` varchar(50) NOT
NULL,
`Status` smallint(6) NOT NULL,
`CityID` int(11) NOT
NULL,
`CTime` datetime NOT NULL,
`OrderNum` int(11) NOT
NULL,
`LogoID` int(11) NOT NULL,
`SignTag` varchar(50) NOT
NULL,
`Summary` varchar(5000) DEFAULT NULL,
`Type`
smallint(6) NOT NULL,
`PageNum` int(11) NOT NULL,
`Own`
int(11) NOT NULL,
`KeyWord` varchar(200) DEFAULT NULL,
`WySupport` int(11) NOT NULL DEFAULT ‘0‘,
`NewEditor` varchar(20)
DEFAULT ‘‘,
`Source` varchar(200) DEFAULT ‘‘,
`RemoteID`
varchar(100) DEFAULT NULL,
`BatchId` int(11) NOT NULL DEFAULT
‘0‘,
`UTime` datetime DEFAULT NULL COMMENT ‘修改时间‘,
`isTop`
int(11) NOT NULL DEFAULT ‘0‘,
`EndTime` datetime DEFAULT NULL COMMENT
‘置顶到期时间‘,
`IsComment` smallint(6) DEFAULT ‘0‘,
`BID` int(11)
NOT NULL DEFAULT ‘0‘,
`VTimes` int(11) NOT NULL,
`Tags`
varchar(1000) DEFAULT NULL,
PRIMARY KEY (`NSID`),
KEY
`CTime` (`CTime`),
KEY `OrderNum` (`OrderNum`),
KEY `NID`
(`NID`),
KEY `NewsName` (`CTime`),
KEY `IsComment`
(`BID`),
KEY `RemoteID` (`RemoteID`),
KEY `CityID`
(`CityID`,`CTime`,`WySupport`,`Type`,`Status`)
) ENGINE=MyISAM
AUTO_INCREMENT=635147 DEFAULT CHARSET=utf8
3.创建第三张表news34,这张表为merge表.
CREATE TABLE `news34` (
`NSID` INT(11) NOT NULL,
`NewsName` VARCHAR(100) NOT NULL,
`Title` VARCHAR(100) NOT
NULL,
`Content` MEDIUMTEXT NOT NULL,
`NID` INT(11) NOT
NULL,
`NIP` VARCHAR(100) NOT NULL,
`Editor` VARCHAR(50) NOT
NULL,
`Status` SMALLINT(6) NOT NULL,
`CityID` INT(11) NOT
NULL,
`CTime` DATETIME NOT NULL,
`OrderNum` INT(11) NOT
NULL,
`LogoID` INT(11) NOT NULL,
`SignTag` VARCHAR(50) NOT
NULL,
`Summary` VARCHAR(5000) DEFAULT NULL,
`Type`
SMALLINT(6) NOT NULL,
`PageNum` INT(11) NOT NULL,
`Own`
INT(11) NOT NULL,
`KeyWord` VARCHAR(200) DEFAULT NULL,
`WySupport` INT(11) NOT NULL DEFAULT ‘0‘,
`NewEditor` VARCHAR(20)
DEFAULT ‘‘,
`Source` VARCHAR(200) DEFAULT ‘‘,
`RemoteID`
VARCHAR(100) DEFAULT NULL,
`BatchId` INT(11) NOT NULL DEFAULT
‘0‘,
`UTime` DATETIME DEFAULT NULL COMMENT ‘修改时间‘,
`isTop`
INT(11) NOT NULL DEFAULT ‘0‘,
`EndTime` DATETIME DEFAULT NULL COMMENT
‘置顶到期时间‘,
`IsComment` SMALLINT(6) DEFAULT ‘0‘,
`BID` INT(11)
NOT NULL DEFAULT ‘0‘,
`VTimes` INT(11) NOT NULL,
`Tags`
VARCHAR(1000) DEFAULT NULL,
PRIMARY KEY (`NSID`),
KEY
`CTime` (`CTime`),
KEY `OrderNum` (`OrderNum`),
KEY `NID`
(`NID`),
KEY `NewsName` (`CTime`),
KEY `IsComment`
(`BID`),
KEY `RemoteID` (`RemoteID`),
KEY `CityID`
(`CityID`,`CTime`,`WySupport`,`Type`,`Status`)
) TYPE=MERGE
UNION=(news3,news4) INSERT_METHOD=LAST AUTO_INCREMENT=1 ;
4.插入测试数据
INSERT INTO news3
SELECT * FROM news WHERE nsid < 750000
INSERT
INTO news4
SELECT * FROM news WHERE nsid >= 750000
5.news表与news34表进行测试比较
SELECT * FROM NEWS34 WHERE cityid = 14 AND ctime LIKE ‘%2014%‘;
SELECT *
FROM NEWS WHERE cityid = 14 AND ctime LIKE ‘%2014%‘;
SELECT * FROM NEWS34 WHERE cityid = 14 AND TYPE = 3 ORDER BY
nsid;
SELECT * FROM NEWS WHERE cityid = 14 AND TYPE = 3 ORDER BY nsid;
SELECT * FROM NEWS34 WHERE cityid = 14 AND TYPE = 2 AND source = ‘吉屋网络整理‘ AND
vtimes <10 ORDER BY nsid DESC;
SELECT * FROM NEWS WHERE cityid = 14 AND
TYPE = 2 AND source = ‘吉屋网络整理‘ AND vtimes <10 ORDER BY nsid DESC;
SELECT * FROM NEWS34 WHERE cityid = 12 AND TYPE = 2 AND source = ‘吉屋网络整理‘ AND
editor=‘sjt‘ AND STATUS = 2 AND keyword LIKE ‘%吉屋%‘ AND vtimes <20 ORDER BY
nsid DESC;
SELECT * FROM NEWS WHERE cityid = 12 AND TYPE = 2 AND source =
‘吉屋网络整理‘ AND editor=‘sjt‘ AND STATUS = 2 AND keyword LIKE ‘%吉屋%‘ AND vtimes
<20 ORDER BY nsid DESC;
第一组sql :myIsam表,也就是news表的执行速度稍微快一点
第二组sql:这组sql查询条件稍微复杂点,有where和order,这是merge表的速度要快于myIsam表
第三组sql:
第四组:
测试结论:
整体上myIsam表和merge表的查询效率差距很小;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。