日期:2014-05-16  浏览次数:20782 次

主键及索引的问题
看yueliangdao0608的文章里面提到的东西,传送门:
http://blog.chinaunix.net/space.php?uid=259788&do=blog&id=2139293
create table category_part( 
cid int unsigned not null auto_increment,
cname varchar(64) not null,
parent_id int not null,
primary key (cid,parent_id))
partition by list(parent_id)(
partition p1 values in (1,2,3,6,9),
partition p2 values in (4,5,10,22,23),
partition p3 values in (7,8,11,12,13),
partition p4 values in (14,15,16,17,20),
partition p5 values in (18,19,21,24,25)
);
这里的主键设置的是(cid,parent_id),因为cid是auto_increment,所以他就是唯一的了。
问题就是:cid做为主键和(cid,parent_id)做为主键有什么区别?
是因为用(cid,parent_id)做为主键的话相当于有了两个索引吗?
以前在我的概念里主键更多的是起唯一标识的作用,没别的含义。
谢谢高人指点一番。

------解决方案--------------------
create table category_part( 
cid int unsigned not null auto_increment,
cname varchar(64) not null,
parent_id int not null,
primary key (cid,parent_id))
partition by list(parent_id)(
partition p1 values in (1,2,3,6,9),
partition p2 values in (4,5,10,22,23),
partition p3 values in (7,8,11,12,13),
partition p4 values in (14,15,16,17,20),
partition p5 values in (18,19,21,24,25)
);
这里的主键设置的是(cid,parent_id),因为cid是auto_increment,所以他就是唯一的了。
问题就是:cid做为主键和(cid,parent_id)做为主键有什么区别?
是因为用(cid,parent_id)做为主键的话相当于有了两个索引吗?
以前在我的概念里主键更多的是起唯一标识的作用,没别的含义。
谢谢高人指点一番。


从这个表结构而言,这样创建主键是因为:parent_id字段是作为分区字段的作用;

分区字段有一个硬性要求:若是分区表有主键则为簇索引或无主键时有非空唯一则为簇索引的情况下,分区字段必须作为簇索引 或簇索引的一部分;

关于InnoDB引擎索引的问题可以查阅网站:www.mysqlops.com 上的资料,自己站内搜索下: innodb 主键选型
------解决方案--------------------
参考手册中的例子。


引用
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;

Which returns:

+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+