重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
联合主键:把两个列看成是一个整体,这个整体是不为空,唯一,不重复
金平网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联建站于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
1.创建表的同时创建联合主键
语法1
语法2
2.针对已经存在表,添加联合主键
表button
CREATE TABLE `button` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, --主键索引
`button_name` varchar(45) NOT NULL COMMENT '功能名称',
`app_id` bigint(20) NOT NULL,
`permission_id` bigint(20) DEFAULT NULL, -- permission_id 和 app_id 联合索引。
`api_id` bigint(20) NOT NULL, --api_id单独索引
PRIMARY KEY (`id`),
KEY `index_app_permission_lianhe` (`permission_id`,`app_id`) USING BTREE,
KEY `index_api_id_dange` (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
主键索引,单独索引,组合索引使用场景及优化
表button 有3个索引,分别是:id主键,联合索引(permission_id,app_id),api_id(单列索引)
button_name 无索引
查询where条件中:
主键索引:
1、主键索引与联合索引同时存在,使用主键索引
2、主键索引与单个索引同时存在,使用主键索引
结论:只要主键索引在,使用主键索引。
联合索引 :
1、联合索引与单列索引列 同时存在,使用单列索引
2、联合索引中列顺序颠倒无影响。
3、联合索引实行最左侧原则,即:单独查询条件中只有permission_id可以使用联合索引,单独查询条件中只有app_id不实用联合索引。
4、如果查询条件中只有app_id,但是select 条件中有 permission_id,则也使用联合索引。
5、select id,app_id from button where app_id=1001; 使用联合索引
6、explain select id,app_id,button_name from button where app_id=1001;不使用联合索引
结论:索引优先级:主键索引,单列索引,组合索引
联合索引中遵从最左侧列原则。
当查询条件和返回结果中仅仅包含联合索引中索引项,也使用联合索引。如第4条。
当查询条件中出现联合索引中非最左侧索引列,返回结果中含义联合索引中的列或者主键则也使用联合索引。
单个索引:
1、查询条件中有单列索引,则使用,无不使用。
事例:
主键只能有一个。
但是,如果你想用多个‘唯一索引’(unique index),是可以有多个的。
主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。
所谓的一张表多个主键,我们称之为联合主键。
可以由多个列形成联合主键,但是主键只能有一个
复合主键就是指你表的主键含有一个以上的字段组成 。 例如; create table test ( name varchar(19), id number, value varchar(10), primary key (id,name) ) 上面的id和name字段组合起来就是你test表的复合主键 (若其一为单索引字段时,左边的id才会有索引) 它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 一般情况下,主键的字段长度和字段数目要越少越好
联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合。 (主键原则上是唯一的,别被唯一值所困扰。) 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。 简单的例子 主键A跟主键B组成联合主键 主键A跟主键B的数据可以完全相同(困扰吧,没关系),联合就在于主键A跟主键B形成的联合主键是唯一的。
联合主键体现在多个表上,复合主键体现在一个表中的多个字段
复合主键: