• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于分区表,函数YEARWEEK无效的疑问。该如何处理

mysql 搞代码 7年前 (2018-06-02) 184次浏览 已收录 0个评论

关于分区表,函数YEARWEEK无效的疑问。

SQL code

  DROP TABLE IF EXISTS `part_test`; CREATE TABLE `part_test` (   `id` mediumint(9) NOT NULL AUTO_INCREMENT,   `date` date NOT NULL,   PRIMARY KEY (`id`,`date`) ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin  AUTO_INCREMENT=5 ;  --  -- 导出表中的数据 `part_test` --   INSERT INTO `part_test` (`id`, `date`) VALUES  (3, '2012-01-03'), (4, '2012-01-22');  --分区 ALTER TABLE `part_test` PARTITION BY RANGE(yearweek(date)) (        PARTITION p201201 VALUES LESS THAN (201202),     PARTITION p201202 VALUES LESS THAN (201203),     PARTITION p201203 VALUES LESS THAN (201204),     PARTITION p201204 VALUES LESS THAN (201205) );  //下边应该是属于今年的第三个星期的也就是等于201203 ,预计查询不会访问第一分区(p201201)才对,但是执行结果是扫描了不该扫描的第一个分区mysql> explain partitions SELECT count(*) FROM `part_test` WHERE `date` > '2012-01-08'; +----+-------------+-----------+---------------------------------+-------+---------------+---------+---------+------+------+--------------------------+ | id | select_type | table     | partitions                      | type  | possible_keys | key     | key_len | ref  | rows | Extra                    | +----+-------------+-----------+---------------------------------+-------+---------------+---------+---------+------+------+--------------------------+ |  1 | SIMPLE      | part_test | p201201,p201202,p201203,p201204 | index | NULL         | PRIMARY | 6       | NULL |    2 | Using where; Using index | +----+-------------+-----------+---------------------------------+-------+---------------+---------+---------+------+------+--------------------------+ 1 row in set (0.00 sec)  

欢迎大家阅读《关于分区表,函数YEARWEEK无效的疑问。该如何处理》,跪求各位点评,by 搞代码

但是用TO_DAYS函数就符合我的扫描预期。

SQL code

  DROP TABLE IF EXISTS `part_test`; CREATE TABLE `part_test` (   `id` mediumint(9) NOT NULL AUTO_INCREMENT,   `date` date NOT NULL,   PRIMARY KEY (`id`,`date`) ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin  AUTO_INCREMENT=5 ;  --  -- 导出表中的数据 `part_test` --   INSERT INTO `part_test` (`id`, `date`) VALUES  (3, '2012-01-03'), (4, '2012-01-22');  ALTER TABLE `part_test` PARTITION BY RANGE(to_days(date)) (        PARTITION p201201 VALUES LESS THAN (to_days('2012-01-08')),     PARTITION p201202 VALUES LESS THAN (to_days('2012-01-15')),     PARTITION p201203 VALUES LESS THAN (to_days('2012-01-23')),     PARTITION p201204 VALUES LESS THAN (to_days('2012-01-30')) );  //下边应该是属于今年的第三个星期的也就是等于201203 ,符合预期 mysql> explain partitions SELECT count(*) FROM `part_test` WHERE `date` > '2012-01-16'; +----+-------------+-----------+-----------------+--------+---------------+------+---------+------+------+-------+ | id | select_type | table     | partitions      | type   | possible_keys | key | key_len | ref  | rows | Extra | +----+-------------+-----------+-----------------+--------+---------------+------+---------+------+------+-------+ |  1 | SIMPLE      | part_test | p201203,p201204 | system | NULL          | NULL | NULL    | NULL |    1 |       | +----+-------------+-----------+-----------------+--------+---------------+------+---------+------+------+-------+ 1 row in set (0.00 sec)  

另外付服务器版本信息

SQL code

  mysql> /s -------------- mysql  Ver 14.14 Distrib 5.1.28-rc, for Win32 (ia32)  

谢谢了。

——解决方案——————–
目前对时间分区 只支持两个函数 year() date()


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于分区表,函数YEARWEEK无效的疑问。该如何处理
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址