【发布时间】:2018-01-16 17:53:18
【问题描述】:
这是表的创建语句:
CREATE TABLE `inodes_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`I_ID` int(11) unsigned NOT NULL DEFAULT '0',
`Time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`Stored` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`dataIndex` int(11) unsigned DEFAULT NULL,
`memoryAddress` int(11) DEFAULT NULL,
`Sens1` float DEFAULT NULL,
`Sens2` float DEFAULT NULL,
`Sens3` float DEFAULT NULL,
`Sens4` float DEFAULT NULL,
`rawData` char(50) NOT NULL,
PRIMARY KEY (`id`,`Time`,`I_ID`),
UNIQUE KEY `i_id_time_idx` (`I_ID`,`Time`),
KEY `I_ID` (`I_ID`),
KEY `IX_TIME` (`Time`)
) ENGINE=InnoDB AUTO_INCREMENT=8289060 DEFAULT CHARSET=latin1 AVG_ROW_LENGTH=83
/*!50100 PARTITION BY RANGE (TO_DAYS(Time))
(PARTITION p2011_Prior VALUES LESS THAN (0) ENGINE = InnoDB,
PARTITION p2011_01 VALUES LESS THAN (734534) ENGINE = InnoDB,
PARTITION p2011_02 VALUES LESS THAN (734562) ENGINE = InnoDB,
PARTITION p2011_03 VALUES LESS THAN (734593) ENGINE = InnoDB,
PARTITION p2011_04 VALUES LESS THAN (734623) ENGINE = InnoDB,
PARTITION p2011_05 VALUES LESS THAN (734654) ENGINE = InnoDB,
PARTITION p2011_06 VALUES LESS THAN (734684) ENGINE = InnoDB,
PARTITION p2011_07 VALUES LESS THAN (734715) ENGINE = InnoDB,
PARTITION p2011_08 VALUES LESS THAN (734746) ENGINE = InnoDB,
PARTITION p2011_09 VALUES LESS THAN (734776) ENGINE = InnoDB,
PARTITION p2011_10 VALUES LESS THAN (734807) ENGINE = InnoDB,
PARTITION p2011_11 VALUES LESS THAN (734837) ENGINE = InnoDB,
PARTITION p2011_12 VALUES LESS THAN (734868) ENGINE = InnoDB,
PARTITION p2012_01 VALUES LESS THAN (734899) ENGINE = InnoDB,
PARTITION p2012_02 VALUES LESS THAN (734928) ENGINE = InnoDB,
PARTITION p2012_03 VALUES LESS THAN (734959) ENGINE = InnoDB,
PARTITION p2012_04 VALUES LESS THAN (734989) ENGINE = InnoDB,
PARTITION p2012_05 VALUES LESS THAN (735020) ENGINE = InnoDB,
PARTITION p2012_06 VALUES LESS THAN (735050) ENGINE = InnoDB,
PARTITION p2012_07 VALUES LESS THAN (735081) ENGINE = InnoDB,
PARTITION p2012_08 VALUES LESS THAN (735112) ENGINE = InnoDB,
PARTITION p2012_09 VALUES LESS THAN (735142) ENGINE = InnoDB,
PARTITION p2012_10 VALUES LESS THAN (735173) ENGINE = InnoDB,
PARTITION p2012_11 VALUES LESS THAN (735203) ENGINE = InnoDB,
PARTITION p2012_12 VALUES LESS THAN (735234) ENGINE = InnoDB,
PARTITION p2013_01 VALUES LESS THAN (735265) ENGINE = InnoDB,
PARTITION p2013_02 VALUES LESS THAN (735293) ENGINE = InnoDB,
PARTITION p2013_03 VALUES LESS THAN (735324) ENGINE = InnoDB,
PARTITION p2013_04 VALUES LESS THAN (735354) ENGINE = InnoDB,
PARTITION p2013_05 VALUES LESS THAN (735385) ENGINE = InnoDB,
PARTITION p2013_06 VALUES LESS THAN (735415) ENGINE = InnoDB,
PARTITION p2013_07 VALUES LESS THAN (735446) ENGINE = InnoDB,
PARTITION p2013_08 VALUES LESS THAN (735477) ENGINE = InnoDB,
PARTITION p2013_09 VALUES LESS THAN (735507) ENGINE = InnoDB,
PARTITION p2013_10 VALUES LESS THAN (735538) ENGINE = InnoDB,
PARTITION p2013_11 VALUES LESS THAN (735568) ENGINE = InnoDB,
PARTITION p2013_12 VALUES LESS THAN (735599) ENGINE = InnoDB,
PARTITION p2014_01 VALUES LESS THAN (735630) ENGINE = InnoDB,
PARTITION p2014_02 VALUES LESS THAN (735658) ENGINE = InnoDB,
PARTITION p2014_03 VALUES LESS THAN (735689) ENGINE = InnoDB,
PARTITION p2014_04 VALUES LESS THAN (735719) ENGINE = InnoDB,
PARTITION p2014_05 VALUES LESS THAN (735750) ENGINE = InnoDB,
PARTITION p2014_06 VALUES LESS THAN (735780) ENGINE = InnoDB,
PARTITION p2014_07 VALUES LESS THAN (735811) ENGINE = InnoDB,
PARTITION p2014_08 VALUES LESS THAN (735842) ENGINE = InnoDB,
PARTITION p2014_09 VALUES LESS THAN (735872) ENGINE = InnoDB,
PARTITION p2014_10 VALUES LESS THAN (735903) ENGINE = InnoDB,
PARTITION p2014_11 VALUES LESS THAN (735933) ENGINE = InnoDB,
PARTITION p2014_12 VALUES LESS THAN (735964) ENGINE = InnoDB,
PARTITION p2015_01 VALUES LESS THAN (735995) ENGINE = InnoDB,
PARTITION p2015_02 VALUES LESS THAN (736023) ENGINE = InnoDB,
PARTITION p2015_03 VALUES LESS THAN (736054) ENGINE = InnoDB,
PARTITION p2015_04 VALUES LESS THAN (736084) ENGINE = InnoDB,
PARTITION p2015_05 VALUES LESS THAN (736115) ENGINE = InnoDB,
PARTITION p2015_06 VALUES LESS THAN (736145) ENGINE = InnoDB,
PARTITION p2015_07 VALUES LESS THAN (736176) ENGINE = InnoDB,
PARTITION p2015_08 VALUES LESS THAN (736207) ENGINE = InnoDB,
PARTITION p2015_09 VALUES LESS THAN (736237) ENGINE = InnoDB,
PARTITION p2015_10 VALUES LESS THAN (736268) ENGINE = InnoDB,
PARTITION p2015_11 VALUES LESS THAN (736298) ENGINE = InnoDB,
PARTITION p2015_12 VALUES LESS THAN (736329) ENGINE = InnoDB,
PARTITION p2016_01 VALUES LESS THAN (736360) ENGINE = InnoDB,
PARTITION p2016_02 VALUES LESS THAN (736389) ENGINE = InnoDB,
PARTITION p2016_03 VALUES LESS THAN (736420) ENGINE = InnoDB,
PARTITION p2016_04 VALUES LESS THAN (736450) ENGINE = InnoDB,
PARTITION p2016_05 VALUES LESS THAN (736481) ENGINE = InnoDB,
PARTITION p2016_06 VALUES LESS THAN (736511) ENGINE = InnoDB,
PARTITION p2016_07 VALUES LESS THAN (736542) ENGINE = InnoDB,
PARTITION p2016_08 VALUES LESS THAN (736573) ENGINE = InnoDB,
PARTITION p2016_09 VALUES LESS THAN (736603) ENGINE = InnoDB,
PARTITION p2016_10 VALUES LESS THAN (736634) ENGINE = InnoDB,
PARTITION p2016_11 VALUES LESS THAN (736664) ENGINE = InnoDB,
PARTITION p2016_12 VALUES LESS THAN (736695) ENGINE = InnoDB,
PARTITION p2017_01 VALUES LESS THAN (736726) ENGINE = InnoDB,
PARTITION p2017_02 VALUES LESS THAN (736754) ENGINE = InnoDB,
PARTITION p2017_03 VALUES LESS THAN (736785) ENGINE = InnoDB,
PARTITION p2017_04 VALUES LESS THAN (736815) ENGINE = InnoDB,
PARTITION p2017_05 VALUES LESS THAN (736846) ENGINE = InnoDB,
PARTITION p2017_06 VALUES LESS THAN (736876) ENGINE = InnoDB,
PARTITION p2017_07 VALUES LESS THAN (736907) ENGINE = InnoDB,
PARTITION p2017_08 VALUES LESS THAN (736938) ENGINE = InnoDB,
PARTITION p2017_09 VALUES LESS THAN (736968) ENGINE = InnoDB,
PARTITION p2017_10 VALUES LESS THAN (736999) ENGINE = InnoDB,
PARTITION p2017_11 VALUES LESS THAN (737029) ENGINE = InnoDB,
PARTITION p2017_12 VALUES LESS THAN (737060) ENGINE = InnoDB,
PARTITION p2018_01 VALUES LESS THAN (737091) ENGINE = InnoDB,
PARTITION p2018_02 VALUES LESS THAN (737119) ENGINE = InnoDB,
PARTITION p2018_03 VALUES LESS THAN (737150) ENGINE = InnoDB,
PARTITION p2018_04 VALUES LESS THAN (737180) ENGINE = InnoDB,
PARTITION p2018_05 VALUES LESS THAN (737211) ENGINE = InnoDB,
PARTITION p2018_06 VALUES LESS THAN (737241) ENGINE = InnoDB,
PARTITION p2018_07 VALUES LESS THAN (737272) ENGINE = InnoDB,
PARTITION p2018_08 VALUES LESS THAN (737303) ENGINE = InnoDB,
PARTITION p2018_09 VALUES LESS THAN (737333) ENGINE = InnoDB,
PARTITION p2018_10 VALUES LESS THAN (737364) ENGINE = InnoDB,
PARTITION p2018_11 VALUES LESS THAN (737394) ENGINE = InnoDB,
PARTITION p2018_12 VALUES LESS THAN (737425) ENGINE = InnoDB,
PARTITION p2019_01 VALUES LESS THAN (737456) ENGINE = InnoDB,
PARTITION p2019_02 VALUES LESS THAN (737484) ENGINE = InnoDB,
PARTITION p2019_03 VALUES LESS THAN (737515) ENGINE = InnoDB,
PARTITION p2019_04 VALUES LESS THAN (737545) ENGINE = InnoDB,
PARTITION p2019_05 VALUES LESS THAN (737576) ENGINE = InnoDB,
PARTITION p2019_06 VALUES LESS THAN (737606) ENGINE = InnoDB,
PARTITION p2019_07 VALUES LESS THAN (737637) ENGINE = InnoDB,
PARTITION p2019_08 VALUES LESS THAN (737668) ENGINE = InnoDB,
PARTITION p2019_09 VALUES LESS THAN (737698) ENGINE = InnoDB,
PARTITION p2019_10 VALUES LESS THAN (737729) ENGINE = InnoDB,
PARTITION p2019_11 VALUES LESS THAN (737759) ENGINE = InnoDB,
PARTITION p2019_12 VALUES LESS THAN (737790) ENGINE = InnoDB,
PARTITION pUnknown VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
针对此表运行的最常见查询是:
SELECT *
FROM inodes_data
WHERE I_ID = xxxxx
AND Time BETWEEN 'xxxx-xx-xx xx:xx:xx' AND 'xxxx-xx-xx xx:xx:xx';
或
SELECT *
FROM inodes_data
WHERE I_ID IN (xxxxx,xxxx,....)
AND Time BETWEEN 'xxxx-xx-xx xx:xx:xx' AND 'xxxx-xx-xx xx:xx:xx';
目前,从该表中查询数据需要很长时间。如果我尝试拉一年,它可能需要 15 秒甚至几分钟。我已经研究过并且正在努力寻找一种方法来加快速度。有没有更好的方法来设置索引,如果有,有人可以告诉我为什么!感谢您的帮助。
【问题讨论】:
-
BETWEEN AND 即在哪里。 在 xxx 和 yyy 之间 ??
-
不管怎样,
WHERE子句的分区表可能比普通表慢很多。查询计划器有时必须单独搜索所有分区。由于表中的行数少于 20 或 3000 万,分区通常弊大于利,尤其是对于最新的 MySQL 版本和 21 世纪的服务器硬件。 83 字节乘以 1000 万行小于 100 兆字节。即使将 dbms 开销乘以 10,这也不算多。 -
@BerndBuffen 抱歉,我只是将它们排除在外。我们在查询中使用它们。
标签: mysql indexing query-performance database-partitioning