复合主键中,第二个主键没有生效

mac2024-07-25  11

复合主键 一个表中的两个主键联合主键 两个表中的主键,用来确定唯一一条数据主键是唯一性索引。其查询效率高于一般索引在使用复合索引的过程中,遇到一种情况,单独使用第二个主键作为查询条件,该主键不会作为索引生效。

表testtt

CREATE TABLE `testtt` ( `num` varchar(22) NOT NULL, `name` varchar(22) NOT NULL, `age` varchar(22) default NULL, PRIMARY KEY (`num`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

执行语句1 通过第一个主键查询

explain select num,name,age from testtt where num= '1'

执行语句2 通过第二个主键查询

explain select num,name,age from testtt where name= '1'

执行语句3 两个主键查询,第二个主键在前,第一个主键在后面

explain select num,name,age from testtt where name = '1' and num = '1'

执行语句4 两个主键查询,第一个主键在前,第二个主键在后面

explain select num,name,age from testtt where num = '1' and name = '1'

第二种建表语句: 交换了复合主键的先后位置

CREATE TABLE `testtt` ( `num` varchar(22) NOT NULL, `name` varchar(22) NOT NULL, `age` varchar(22) default NULL, PRIMARY KEY (`name`,`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

执行语句1 通过第一个主键查询

explain select num,name,age from testtt where name= '1'

执行语句2 通过第二个主键查询

explain select num,name,age from testtt where num= '1'

结论:

复合主键中,单独使用第二个主键作为where条件,是不会作为索引去查询的,需要将第二个主键定义为索引才会生效。复合主键中,同时使用第一个和第二个主键最为where条件两个主键都会作为索引生效。复合主键中,单独使用第一个主键作为where条件,是会作为索引生效的。在sql前加上explain,可以查看sql的执行计划。
最新回复(0)