免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2153 | 回复: 9
打印 上一主题 下一主题

mysql 5.1.31版本 分区问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-27 16:19 |只看该作者 |倒序浏览
mysql 5.1.31版本 分区问题 

有分区但仍是全表扫描的问题,谢谢帮忙!问题如下:

本人根据需求,一个月大概是3,4百万的数据。按天分表,分了31个区(定义了day_flag tinyint),采用的是range(dat_flag)方式。建表一路ok后。

第一次查询,
按分区查找正常。如下:

mysql> explain partitions select * from frontr where day_flag<14\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1708593
        Extra: Using where
接着在查,出现故障:
 explain partitions select * from frontr where day_flag<4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p1,p2,p3,p4
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1708593
        Extra: Using where
1 row in set (0.00 sec)


 explain partitions select * from frontr where day_flag>4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 3435283
        Extra: Using where

分区如下:
PARTITION BY range (`day_flag`) 
(
PARTITION p1 values less than  (1),
PARTITION p2 values less than  (2),
PARTITION p3 values less than  (3),
PARTITION p4 values less than  (4),
PARTITION p5 values less than  (5),
PARTITION p6 values less than  (6),
PARTITION p7 values less than  (7),
PARTITION p8 values less than  (,
PARTITION p9 values less than  (9),
PARTITION p10 values less than  (10),
PARTITION p11 values less than  (11),
PARTITION p12 values less than  (12),
PARTITION p13 values less than  (13),
PARTITION p14 values less than  (14),
PARTITION p15 values less than  (15),
PARTITION p16 values less than  (16),
PARTITION p17 values less than  (17),
PARTITION p18 values less than  (1,
PARTITION p19 values less than  (19),
PARTITION p20 values less than  (20),
PARTITION p21 values less than  (21),
PARTITION p22 values less than  (22),
PARTITION p23 values less than  (23),
PARTITION p24 values less than  (24),
PARTITION p25 values less than  (25),
PARTITION p26 values less than  (26),
PARTITION p27 values less than  (27),
PARTITION p28 values less than  (2,
PARTITION p29 values less than  (29),
PARTITION p30 values less than  (30),
PARTITION p31 values less than  (31),
PARTITION p32 values less than  (32)
);
请问是怎么个情况。有分区但扫描的是全表?多谢!

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
2 [报告]
发表于 2009-02-27 16:44 |只看该作者
day_flag 存储的值呢?

两者比较下,一个是月,一个是日,字段是datetime。

partition  by range   (TO_DAYs(addtime))
(
PARTITION   p1   VALUES  LESS THAN (to_days('2008-11-01')),
PARTITION   p2   VALUES  LESS THAN (to_days('2008-12-01')),
PARTITION   p3   VALUES  LESS THAN (to_days('2009-01-01')),
PARTITION   p4   VALUES  LESS THAN (to_days('2009-02-01')),
PARTITION   p5   VALUES  LESS THAN (to_days('2009-03-01')),
PARTITION   p6   VALUES  LESS THAN (to_days('2009-04-01')),
PARTITION   p7   VALUES  LESS THAN (to_days('2009-05-01')),
PARTITION   p8   VALUES  LESS THAN (to_days('2009-06-01')),
PARTITION   p9   VALUES  LESS THAN (to_days('2009-07-01')),
PARTITION   p10   VALUES  LESS THAN (to_days('2009-08-01')),
PARTITION   p11   VALUES  LESS THAN (to_days('2009-09-01')),
PARTITION   p12   VALUES  LESS THAN (to_days('2009-10-01')),
PARTITION   p13   VALUES  LESS THAN (to_days('2009-11-01')),
PARTITION   p14   VALUES  LESS THAN (to_days('2009-12-01')),
PARTITION   p15   VALUES  LESS THAN (to_days('2010-01-01')),
PARTITION   p16   VALUES  LESS THAN (to_days('2010-02-01')),
PARTITION   p17   VALUES  LESS THAN (to_days('2010-03-01')),
PARTITION   p18   VALUES  LESS THAN (to_days('2010-04-01')),
PARTITION   p19   VALUES  LESS THAN (to_days('2010-05-01')),
PARTITION   p20   VALUES LESS THAN MAXVALUE
)  
;




partition  by list  (DAY(addtime))
(
PARTITION   p1   VALUES  in(1),
PARTITION   p2   VALUES  in(2),
PARTITION   p3   VALUES  in(3),
PARTITION   p4   VALUES  in(4),
PARTITION   p5   VALUES  in(5),
PARTITION   p6   VALUES  in(6),
PARTITION   p7   VALUES  in(7),
PARTITION   p8   VALUES  in(8),
PARTITION   p9   VALUES  in(9),
PARTITION   p10  VALUES  in(10),
PARTITION   p11  VALUES  in(11),
PARTITION   p12   VALUES  in(12),
PARTITION   p13  VALUES  in(13),
PARTITION   p14   VALUES  in(14),
PARTITION   p15   VALUES  in(15),
PARTITION   p16   VALUES  in(16),
PARTITION   p17   VALUES  in(17),
PARTITION   p18   VALUES  in(18),
PARTITION   p19   VALUES  in(19),
PARTITION   p20  VALUES  in(20),
PARTITION   p21   VALUES  in(21),
PARTITION   p22   VALUES  in(22),
PARTITION   p23   VALUES  in(23),
PARTITION   p24   VALUES  in(24),
PARTITION   p25   VALUES  in(25),
PARTITION   p26   VALUES  in(26),
PARTITION   p27   VALUES  in(27),
PARTITION   p28   VALUES  in(28),
PARTITION   p29   VALUES  in(29),
PARTITION   p30   VALUES  in(30),
PARTITION   p31  VALUES  in(31)
)  
;


[ 本帖最后由 枫影谁用了 于 2009-2-27 17:01 编辑 ]

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
3 [报告]
发表于 2009-02-27 17:03 |只看该作者

回复 #1 qxbq 的帖子

没有全表扫描啊。

mysql> explain partitions select * from frontr where day_flag<14\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14

explain partitions select * from frontr where day_flag>4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32

论坛徽章:
0
4 [报告]
发表于 2009-02-27 17:42 |只看该作者

回复 #3 枫影谁用了 的帖子

explain partitions select * from frontr where day_flag<4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p1,p2,p3,p4
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1708593
小于四的分区 应该是40万 不是170万
explain partitions select * from frontr where day_flag>4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 3435283
        Extra: Using where

论坛徽章:
0
5 [报告]
发表于 2009-02-27 17:45 |只看该作者

分区体现出来了 ,第一次查询后,扫描的行数rows都是340万,all了

分区体现出来了 ,第一次查询后,扫描的行数rows都是340万,all了

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
6 [报告]
发表于 2009-02-27 17:45 |只看该作者
那是另外的问题。下面的提示没有错哦

partitions: p1,p2,p3,p4

partitions: p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32

论坛徽章:
0
7 [报告]
发表于 2009-02-27 17:49 |只看该作者

明显的全表扫面啊

type: ALL  ->> 都all了 还不是 full scan ?  一个 key都没有用上,你的索引建在哪里了?
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
8 [报告]
发表于 2009-02-27 17:51 |只看该作者

回复 #7 笑面狐 的帖子

这是两个问题,一个是分区,一个是索引。

数据从所在区找数据,再是如何走索引。

论坛徽章:
0
9 [报告]
发表于 2009-02-27 17:54 |只看该作者

day_flag = day(date)

day_flag = day(date) 该字段没建索引 但是为啥第一次能出来 以后就不对了?谢谢

论坛徽章:
0
10 [报告]
发表于 2009-02-27 18:22 |只看该作者

对day_flag建了索引后 问题依旧?

mysql> explain  partitions select * from frontr where day_flag=4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
   partitions: p5
         type: ALL
possible_keys: day
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 3435283
        Extra: Using where
1 row in set (0.00 sec)

mysql> explain  select * from frontr where day_flag=4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: frontr
         type: ALL
possible_keys: day
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 3435283
        Extra: Using where
1 row in set (0.00 sec)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP