求助一个分区问题
有如下SQL语句
-
SQL code
CREATE TABLE IF NOT EXISTS `dx_gd_goods2` ( `g_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID\n' , `g_name` varchar(225) COMMENT '商品名称\n' , `b_id` int(11) unsigned not NULL COMMENT '商家ID\n', `t_id` int(11) unsigned not NULL COMMENT '所属分类ID\n', `g_img_big` varchar(200) NULL COMMENT '商品大图\n' , PRIMARY KEY (`g_id`,`t_id`) ) ENGINE = MyISAM DEFAULT CHARSET=utf8 COMMENT = '商品表\n' PARTITION BY RANGE (t_id) ( PARTITION p0 VALUES LESS THAN (0), PARTITION p1 VALUES LESS THAN (100000000) , PARTITION p2 VALUES LESS THAN (110000000) , PARTITION p3 VALUES LESS THAN (120000000) , PARTITION p4 VALUES LESS THAN (130000000) , PARTITION p5 VALUES LESS THAN (140000000) , PARTITION p6 VALUES LESS THAN (150000000) , PARTITION p7 VALUES LESS THAN (160000000) , PARTITION p8 VALUES LESS THAN (170000000) , PARTITION p9 VALUES LESS THAN (180000000) , PARTITION p10 VALUES LESS THAN(190000000) , PARTITION p11 VALUES LESS THAN MAXVALUE );
我以t_id分区,分区是成功了的(我写入了一个数据,然后删除他的对应分区,在查询是得不到数据的,这就表示分区成功),然后呢,我explan一下
explain SELECT * FROM `dx_gd_goods2` where t_id >=100000000 and t_id<110000000;
结果看到的信息里,并没有用到分区 (没有partitions这个信息),我想请问一下,我这里分区那错了?我怎么才能用得到分区呢?
explain
mysql> explain SELECT * FROM `dx_gd_goods2` where t_id >=100000000 and t_id<110000000;
+—-+————-+————–+——–+—————+——+———+——+——+——-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+————–+——–+—————+——+———+——+——+——-+
| 1 | SIMPLE | dx_gd_goods2 | system | NULL | NULL | NULL | NULL | 1 | |
+—-+————-+————–+——–+—————+——+———+——+——+——-+
1 row in set (0.00 sec)
转到mysql版吧,那边牛人多。
找专业高手问问,少走弯路~
分区是内部行为,对于使用者而言:除了查询速度变快了以外,与不分区的表没有什么两样
explain 返回的是 sql 指令使用资源的情况,与分区无关
explain 也不会给出如何创建分区的建议
分区主要用于当你一个表的数据非常大时
你可以试一下 有几千万数据的分区表跟没分区表 再对比下速度