主键、索引等的区别
- 格式:docx
- 大小:77.12 KB
- 文档页数:6
MySQL中KEY、PRIMARYKEY、UNIQUEKEY、INDEX的区别对于题⽬中提出的问题,可以拆分来⼀步步解决。
在 MySQL 中 KEY 和 INDEX 是同义。
那这个问题就可以简化为 PRIMARY KEY,UNIQUE KEY 和 INDEX 的区别。
⽽这三者也正好是索引的划分,主键索引,唯⼀索引和普通索引(INDEX)。
使⽤ INDEX 来加速从数据库中读取数据。
INDEX 通常加在那些 JOIN, WHERE,和 ORDER BY ⼦句的列上。
创建索引时,需要确保该索引是应⽤在 SQL 查询语句的条件(⼀般作为 WHERE ⼦句的条件)。
实际上,索引也是⼀张表,该表保存了主键与索引字段,并指向实体表的记录。
索引也有它的缺点:虽然索引提⾼了查询速度,却会降低更新表的速度,如对表进⾏INSERT、UPDATE和DELETE。
因为更新表时,MySQL不仅要保存数据,还要保存⼀下索引⽂件。
MySQL 中 KEY 与 INDEX 区别KEY 通常是 INDEX 同义词。
如果关键字属性 PRIMARY KEY 在列定义中已给定,则 PRIMARY KEY 也可以只指定为KEY。
这么做的⽬的是与其它数据库系统兼容。
PRIMARY KEY 是⼀个唯⼀ KEY,此时,所有的关键字列必须定义为NOT NULL。
如果这些列没有被明确地定义为NOT NULL,MySQL应隐含地定义这些列。
KEY 即键值,是关系模型理论中的⼀部份,⽐如有主键(PRIMARY KEY),外键(Foreign KEY)等,⽤于数据完整性检否与唯⼀性约束等。
⽽ INDEX 则处于实现层⾯,⽐如可以对表个的任意列建⽴索引,那么当建⽴索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从⽽快速检索。
⾄于UNIQUE INDEX,则只是属于INDEX中的⼀种⽽已,建⽴了UNIQUE INDEX表⽰此列数据不可重复,猜想MySQL对UNIQUE INDEX类型的索引可以做进⼀步特殊优化吧。
数据库的几个概念:主键,外键,索引,唯一索引主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型;外键:定义数据表假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。
用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。
在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。
很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。
这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。
首先我们来创建 parts 表:CREATE TABLE parts (... 字段定义 ...,model VARCHAR(20) NOT NULL,... 字段定义 ...);接下来是Pc表:CREATE TABLE pc (... 字段定义 ...,cpumodel VARCHAR(20) NOT NULL,... 字段定义 ...};设置索引若要设置外键,在参照表(referencing table,即Pc表) 和被参照表(referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。
对Parts表:ALTER TABLE parts ADD INDEX idx_model (model);这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。
对Pc表也类似:ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);事实上这两个索引可以在创建表的时候就设置。
数据库主键和外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别收藏主键、外键和索引的区别?聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
数据库中主键与索引的区别
区别:
1:主键是为了标识数据库记录唯⼀性,不允许记录重复,且键值不能为空,主键也是⼀个特殊索引.
2:数据表中只允许有⼀个主键,但是可以有多个索引.
3.使⽤主键会数据库会⾃动创建主索引,也可以在⾮主键上创建索引,⽅便查询效率.
4:索引可以提⾼查询速度,它就相当于字典的⽬录,可以通过它很快查询到想要的结果,⽽不需要进⾏全表扫描. 5:主键索引外索引的值可以为空.
6:主键也可以由多个字段组成,组成复合主键,同时主键肯定也是唯⼀索引.
7:唯⼀索引则表⽰该索引值唯⼀,可以由⼀个或⼏个字段组成,⼀个表可以有多个唯⼀索引.。
mysql数据库外键、主键详解⼀、什么是主键、外键:关系型数据库中的⼀条记录中有若⼲个属性,若其中某⼀个属性组(注意是组)能唯⼀标识⼀条记录,该属性组就可以成为⼀个主键⽐如学⽣表(学号,姓名,性别,班级)其中每个学⽣的学号是唯⼀的,学号就是⼀个主键课程表(课程编号,课程名,学分)其中课程编号是唯⼀的,课程编号就是⼀个主键成绩表(学号,课程号,成绩)成绩表中单⼀⼀个属性⽆法唯⼀标识⼀条记录,学号和课程号的组合才可以唯⼀标识⼀条记录,所以学号和课程号的属性组是⼀个主键成绩表中的学号不是成绩表的主键,但它和学⽣表中的学号相对应,并且学⽣表中的学号是学⽣表的主键,则称成绩表中的学号是学⽣表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结⼀下:1.主键是能确定⼀条记录的唯⼀标识,⽐如,⼀条记录包括⾝份正号,姓名,年龄。
⾝份证号是唯⼀能确定你这个⼈的,其他都可能有重复,所以,⾝份证号是主键。
2.外键⽤于与另⼀张表的关联。
是能确定另⼀张表记录的字段,⽤于保持数据的⼀致性。
⽐如,A表中的⼀个字段,是B表的主键,那他就可以是A表的外键。
⼆、主键、外键和索引的区别sql语句会⾃动判定查询字段有⽆索引,继⽽使⽤索引去检索主键、外键和索引的区别?主键外键索引定义:唯⼀标识⼀条记录,不能有重复的,不允许为空表的外键是另⼀表的主键, 外键可以有重复的, 可以是空值该字段没有重复值,但可以有⼀个空值作⽤:⽤来保证数据完整性⽤来和其他表建⽴联系⽤的是提⾼查询排序的速度个数:主键只能有⼀个⼀个表可以有多个外键⼀个表可以有多个惟⼀索引聚集索引和⾮聚集索引的区别?聚集索引⼀定是唯⼀索引。
但唯⼀索引不⼀定是聚集索引。
聚集索引,在索引页⾥直接存放数据,⽽⾮聚集索引在索引页⾥存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为⼀个有效的关系数据库的粘合剂。
数据库键的概念数据库键是数据库中用于唯一标识和索引数据记录的一种机制。
它可以帮助数据库系统快速定位、访问和操作数据。
下面将对数据库键的概念进行详细解释。
1. 什么是数据库键数据库键是数据库表中用于唯一标识每条记录的一列或一组列。
它们具有唯一性,即每个键值都是唯一的,用于在数据库中区分不同的数据记录。
数据库系统使用键来进行数据的查找、排序和关联。
2. 主键(Primary Key)主键是数据库表中的一列或一组列,用于唯一标识每条记录。
主键的值不能重复,而且不能为空值。
主键可以由一列或多列组成,称为复合主键。
主键的作用是保证数据的完整性,防止重复和不一致的数据记录。
例如,一个用户表的主键可以是用户ID列。
3. 外键(Foreign Key)外键是数据库表中的一列,用于建立表与表之间的关联关系。
外键引用了另一个表的主键,将两个表联系在一起。
外键的作用是维护表与表之间的数据一致性,并实现数据的关联查询。
例如,一个订单表中的外键可以引用一个用户表中的主键,表示订单是由哪个用户所创建的。
4. 唯一键(Unique Key)唯一键是数据库表中的一列或一组列,用于确保每个键值都是唯一的,但允许空值。
与主键不同,唯一键允许有多个空值。
唯一键的作用是防止出现重复的数据记录。
例如,一个邮箱表中的唯一键可以是邮箱地址列,确保每个邮箱地址只能出现一次。
5. 索引(Index)索引是一种特殊的数据结构,用于提高数据库的查询效率。
它是基于数据库键创建的,可以加快数据的查找和排序。
索引通常包含键的值和指向数据记录的指针。
数据库系统使用索引来快速定位需要查询的数据记录,减少数据扫描的时间。
例如,一个电话号码列可以创建一个索引,加快根据电话号码查询用户信息的速度。
总结起来,数据库键是用于唯一标识和索引数据记录的一种机制。
主键用于唯一标识记录,外键用于建立表与表之间的关联关系,唯一键用于确保键值的唯一性,索引用于加快数据的查找和排序。
主键、唯⼀键与唯⼀索引的区别⼀般,我们看到术语“索引”和“键”交换使⽤,但实际上这两个是不同的。
索引是存储在数据库中的⼀个物理结构,键纯粹是⼀个逻辑概念。
键代表创建来实施业务规则的完整性约束。
索引和键的混淆通常是由于数据库使⽤索引来实施完整性约束。
接下来我们看看数据库中的主键约束、唯⼀键约束和唯⼀索引的区别。
SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE 11.2.0.1.0 ProductionTNS for Linux: Version 11.2.0.1.0 - ProductionNLSRTL Version 11.2.0.1.0 - ProductionSQL> create table test (2 id int,3 name varchar2(20),4 constraint pk_test primary key(id))5 tablespace users;Table created.SQL> select constraint_name, constraint_type from user_constraints;CONSTRAINT_NAME C------------------------------ -PK_TEST P在test表中,我们指定了ID列作为主键,Oracle数据库会⾃动创建⼀个同名的唯⼀索引:SQL> select index_name, index_type, uniqueness, tablespace_name2 from user_indexes3 where table_owner='SCOTT'4 and table_name = 'TEST';INDEX_NAME INDEX_TYPE UNIQUENES TABLESPACE_NAME-------------------- -------------------- --------- ------------------------------PK_TEST NORMAL UNIQUE USERS此时,如果我们再试图在ID列上创建⼀个唯⼀索引,Oracle会报错,因为该列上已经存在⼀个唯⼀索引:SQL> create unique index idx_test_uk on test(id);create unique index idx_test_uk on test(id)*ERROR at line 1:ORA-01408: such column list already indexed即使创建⾮唯⼀索引也不⾏:SQL> create index idx_test_id on test(id);create index idx_test_id on test(id)*ERROR at line 1:ORA-01408: such column list already indexed那么唯⼀键约束的情况是怎样的呢?SQL> drop table test purge;Table dropped.SQL> create table test(2 id int,3 name varchar2(20),4 constraint uk_test unique(id));Table created.SQL> select constraint_name, constraint_type from user_constraints;CONSTRAINT_NAME C------------------------------ -UK_TEST U查看此时的索引情况:SQL> select index_name, index_type, uniqueness, tablespace_name2 from user_indexes3 where table_owner='SCOTT'4 and table_name = 'TEST';INDEX_NAME INDEX_TYPE UNIQUENES TABLESPACE_NAME-------------------- -------------------- --------- ------------------------------UK_TEST NORMAL UNIQUE USERSOracle同样⾃动创建了⼀个同名的唯⼀索引,⽽且也不允许再在此列上创建唯⼀索引或⾮唯⼀索引。
关于数据库主键和外键一、什么是主键、外键关系型数据库中的一条记录中有若干个属性 若其中某一个属性组(注意是组)能唯一标识一条记录 该属性组就可以成为一个主键比如学生表(学号 姓名 性别 班级) ,其中每个学生的学号是唯一的,学号就是一个主键,课程表(课程编号,课程名,学分) 。
其中课程编号是唯一的,课程编号就是一个主键。
成绩表(学号,课程号,成绩) 。
成绩表中单一一个属性无法唯一标识一条记录 学号和课程号的组合才可以唯一标识一条记录 所以学号和课程号的属性组是一个主键。
成绩表中的学号不是成绩表的主键 但它和学生表中的学号相对应。
并且学生表中的学号是学生表的主键 则称成绩表中的学号是学生表的外键。
同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性。
总结一下1.主键是能确定一条记录的唯一标识 比如 一条记录包括身份正号 姓名 年龄。
身份证号是唯一能确定你这个人的 其他都可能有重复 所以 身份证号是主键。
2.外键用于与另一张表的关联。
是能确定另一张表记录的字段 用于保持数据的一致性。
比如 A表中的一个字段 是B表的主键 那他就可以是A表的外键。
二、主键、外键和索引的区别主键、外键和索引的区别?主键外键索引定义:唯一标识一条记录,不能有重复的,不允许为空表的外键是另一表的主键,外键可以有重复的,可以是空值该字段没有重复值,但可以有一个空值。
作用:用来保证数据完整性用来和其他表建立联系用的是提高查询排序的速度。
个数:主键只能有一个一个表可以有多个外键一个表可以有多个惟一索引。
聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
MySQL中的约束与索引的区别与应用场景引言MySQL是当前最为流行的开源数据库管理系统之一,广泛用于各种Web应用和企业级系统中。
在使用MySQL进行数据库设计和优化时,约束和索引是两个非常重要的概念。
本文将对MySQL中的约束和索引进行详细的解释,并探讨它们的区别和应用场景。
一、约束的概念与作用约束是一种数据库对象,用于确保数据的完整性和一致性。
它们定义了某些条件,数据库中的数据必须满足这些条件。
当尝试插入、更新或删除数据时,如果违反了约束条件,MySQL将拒绝执行该操作,并抛出错误。
1. 主键约束主键是用于唯一标识表中每个记录的字段或字段组合。
它提供了一种快速访问数据的方式,并确保表中的每个记录都有唯一的标识。
主键约束要求主键字段的值不可为空,且不能重复。
在MySQL中,可以使用PRIMARY KEY关键字来定义主键约束。
2. 唯一约束唯一约束用于确保表中的某个字段或字段组合的值是唯一的。
与主键不同的是,唯一约束可以包含空值。
唯一约束可用于加速数据检索,确保数据的一致性。
在MySQL中,可以使用UNIQUE关键字来定义唯一约束。
3. 外键约束外键约束用于建立表与表之间的关系,确保引用关系的完整性。
通过外键约束,可以定义一个表中的字段与另一个表的主键或唯一键字段之间的关系。
引用的表称为主表,被引用的表称为外表。
外键约束要求外键字段的值必须在主表的主键或唯一键中存在。
在MySQL中,可以使用FOREIGN KEY关键字来定义外键约束。
二、索引的概念与作用索引是一种数据结构,用于加快数据的检索速度。
它通过创建特定的数据结构和算法,根据一个或多个字段的值建立索引。
索引可以按照顺序存储表中的数据,并提供快速访问数据的方法。
1. B-Tree索引B-Tree索引是MySQL中最常用的索引类型之一。
它适用于等值查询、范围查询以及排序等操作。
B-Tree索引使用B-Tree数据结构存储索引数据,可以快速确定数据的位置。
Mysql中普通索引key、主键索引(primarykey)、唯⼀索引(uniquekey。
⼀、索引的定义和由来:索引被⽤来快速找出在⼀个列上⽤⼀特定值的⾏。
没有索引,MySQL不得不⾸先以第⼀条记录开始并然后读完整个表直到它找出相关的⾏。
表越⼤,花费时间越多。
如果表对于查询的列有⼀个索引,MySQL能快速到达⼀个位置去搜寻到数据⽂件的中间,没有必要考虑所有数据。
所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B-tree树中存储。
字符串是⾃动地压缩前缀和结尾空间⼆、索引的分类1、普通索引key如下建表语句:CREATE TABLE `phpcolor_ad` (`id` mediumint(8) NOT NULL AUTO_INCREMENT,`name` varchar(30) NOT NULL,`type` mediumint(1) NOT NULL,`code` text,PRIMARY KEY (`id`),KEY `type` (`type`));最后⼀句的KEY `type` (`type`)是什么意思?如果只是key的话,就是普通索引。
mysql的key和index多少有点令⼈迷惑,单独的key和其它关键词结合的key(primary key)实际表⽰的意义是不同,这实际上考察对数据库体系结构的了解的。
key 是数据库的物理结构,它包含两层意义和作⽤,⼀是约束(偏重于约束和规范数据库的结构完整性),⼆是索引(辅助查询⽤的)。
包括primary key, unique key, foreign key 等。
2、主键索引primary keyprimary key 有两个作⽤,⼀是约束作⽤(constraint),⽤来规范⼀个存储主键和唯⼀性,但同时也在此key上建⽴了⼀个主键索引;PRIMARY KEY 约束:唯⼀标识数据库表中的每条记录;主键必须包含唯⼀的值;主键列不能包含 NULL 值;每个表都应该有⼀个主键,并且每个表只能有⼀个主键。
常见数据库对象(视图、索引、触发器、事务)⼀、视图1.1 视图的定义 视图是指计算机数据库中的视图,是⼀个虚拟表,其内容由查询结果来定义。
同真实的表⼀样,视图包含⼀系列带有名称的⾏和列数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
⾏和列数据来⾃由定义视图的查询所引⽤的表,并且在引⽤视图时动态⽣成。
如果基表中的数据发⽣变化,则从视图中查询出的数据也随之变化。
1.2 视图的优点(1)定制⽤户数据 每个组织都有不同⾓⾊的⼯作⼈员,以销售公司为例,采购⼈员需要⼀些与采购有关的数据,⽽与采购⽆关的数据,对采购⼈员没有任何意义。
可以根据这⼀实际情况,专门为采购⼈员创建⼀个视图,以后采购⼈员在查询数据时,只需执⾏“select * from 采购视图”就可以了。
(2)简化数据操作 在使⽤查询时,很多时候需要使⽤聚合函数,同时还要显⽰其他字段的信息,可能还会关联到其他表,这时写的SQL语句会很长,如果这个多做频繁发⽣的话,就可以通过创建视图,简化数据来查询。
(3)细粒化的安全机制 因为视图是虚拟的,物理上是不存在的,它只是存储了数据的集合。
因此,可以将基表中重要的字段信息不通过视图提供给⽤户。
视图是动态的数据的集合,数据是随着基表的更新⽽更新的。
同时,⽤户不可以随意地更改和删除视图,以保证数据的安全性。
(4)合并分离的数据 随着社会的发展,公司的业务量不断地扩⼤。
为了管理⽅便,对于设有很多分公司的⼤公司,需要统⼀表的结构,从⽽定期查看各个分公司的业务情况。
使⽤union关键字,可以将各分公司的数据合并为⼀个视图,这样既⽅便⼜⾼效。
1.3 视图的创建和使⽤语法: create view view_name as select column_name(n) from table_name(n) where condition说明: view_name:视图名 column_name(n):视图中的字段列表,可以来源于多个表 table_name(n):表名,可以来源于多个表 condition:条件表达式,如果是多个表,则该表达式还包含标的连接条件⼆、索引2.1 索引的基本知识 2.1.1 理解索引 2.1.2 索引⼯作的原理 2.1.3 索引的作⽤ 2.1.4 索引的优缺点 优点: (1)⼤⼤加快了数据的检索速度。
数据库管理系统的主键与索引优化在现代信息技术快速发展的时代,数据库管理系统成为了重要的工具之一。
数据库管理系统(DBMS)是一种用于管理数据库的计算机软件。
它能够有效地存储、处理和管理数据,提供数据的安全性和可靠性。
在数据库中,主键和索引是关键的概念,对于提高数据库性能和优化查询操作非常重要。
1. 主键的定义和作用主键是数据库表中用于唯一标识每行记录的一列或多列。
它的作用是确保表中的每行数据都有唯一的标识符。
主键的选择应当基于以下几点原则:a. 独一无二:主键值在整个表中是唯一的,不能重复。
b. 不可为空:主键值不能为NULL,否则就无法唯一标识一条记录。
c. 稳定性:主键值应该具有稳定性,不经常变动。
主键的定义对于数据库的性能很关键。
首先,在建立主键之后,数据库会自动创建唯一索引,提高查询效率。
其次,主键还能够保证数据的一致性和完整性。
不仅如此,主键还可以作为关联两个表的链接,确保数据的关联性。
2. 索引的定义和使用场景索引是数据库中用于加速数据检索的数据结构。
它是一个单独的数据库对象,存储在磁盘上,并且占用一定的磁盘空间。
索引可以是B 树、哈希表等不同的结构,用于快速定位查找所需数据。
一般来说,数据库中主要有以下几种类型的索引:a. 主键索引:由主键字段自动生成的索引。
b. 唯一索引:保证索引列的值在整个表中是唯一的。
c. 聚集索引:物理上改变表的顺序,根据索引列对表进行排序。
d. 非聚集索引:不改变表的物理顺序,通过指向索引列的指针进行定位。
索引对数据库性能的提升是显著的。
当数据库表的数据量非常大时,使用索引可以大幅减少查询的时间,提高数据检索的效率。
然而,索引同样会增加写入的成本和空间占用,因此在选择索引的时候需要权衡利弊。
一般来说,对于经常作为查询条件的字段,或者频繁进行连接操作的字段,使用索引是非常有益的。
3. 主键与索引的优化策略针对主键和索引的优化,可以从以下几个方面进行考虑和实施。
聚簇索引非聚簇索引主键索引
聚簇索引、非聚簇索引和主键索引是数据库中常用的三种索引类型,它们各自有不同的特点和应用场景。
聚簇索引是将表数据按照索引键值的顺序存储在硬盘上,因此聚簇索引的叶子节点存储了整个表的数据行,也就是说,表的主键是聚簇索引的索引键。
聚簇索引适用于经常需要查询的字段,可以提高查询效率,但是对于经常进行插入、更新、删除操作的表,聚簇索引的维护成本比较高。
非聚簇索引是将索引键值和对应行的地址存储在一个数据结构中,索引结构的叶子节点并不保存数据行的全部信息,而是保存一个指向对应数据行的指针。
非聚簇索引适用于经常进行插入、更新、删除操作的表,但是查询效率相对聚簇索引要低一些。
主键索引是一个特殊的聚簇索引,它将表的主键作为索引键值。
主键索引是最常用的索引类型,可以保证表的数据行的唯一性,同时也提高了查询效率。
不同类型的索引在数据库应用中有着不同的应用场景和优缺点,需要根据具体的业务需求进行选择和使用。
- 1 -。
键、索引、约束及其区别今天下午刚好没事,把一些基础性的概念理顺一下,存档,省的麻烦,嘿嘿一.索引1.什么是索引?索引是对数据库表中一列或多列的值进行排序的一种结构。
在关系型数据库中,索引是一种与表有关的数据库结构,是事实存在的。
它可以使对于表的select等等操作更加快速,相当于一本书的目录。
对于一张表,如果我们想要找到某一列符合特定值的记录,第一种方法是全表搜索,匹配,然后把所有符合的记录列出,但是这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
由此可知,索引是要消耗数据库空间的。
并非所有的数据库都以相同的方式使用索引。
作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。
索引占用磁盘空间,并且降低添加、删除和更新行的速度。
在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。
但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。
可以使用单列作为索引,也可以使用多列联合作为索引。
2.索引的优缺点优点:(1)大大加快数据的检索速度;(2)创建唯一性索引,保证数据库表中每一行数据的唯一性;(3)加速表和表之间的连接;(4)在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点:(1)索引需要占物理空间。
(2)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
建立索引时的注意事项:(1)考虑已在表上创建的索引数量。
最好避免在单个表上有很多索引(2)检查已在表上创建的索引的定义。
最好避免包含共享列的重叠索引(3)检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。
比如如果有1000w记录,某字段为性别,只有男,女。
也就是说一半的记录都是重复的,这样就要考虑是否还有必要建立索引了。
3.一些索引类别(1)普通索引也即不加任何限制的索引。
可通过以下语句理解。
create table zjj_temp_1 (id number(10),first_namechar(10),last_name char(10),age number(3),valnumber(10,2));insert into zjj_temp_1 values(1,'junjie','zhang',25,4000);select * from zjj_temp_1;此时一条记录已经插入进入了。
create index zjj_temp_index_1 on zjj_temp_1(first_name);--------建立索引insert into zjj_temp_1 values(1,'junjie','zhang',25,4000)--------再次插入一条一模一样的记录select * from zjj_temp_1;Ok!两条记录出现了,也即此索引的作用是让你再查找first_name为某一个特定值的记录时速度更快而已,仅此而已。
(2)唯一索引一种索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。
系统在创建该索引时检查是否有重复的键值,并在每次使用INSERT 或UPDATE 语句添加数据时进行检查。
继续分析例子:drop index zjj_temp_index_1; ----删除上文创建的普通索引。
create unique index zjj_temp_1 on zjj_temp_1(id);----建立唯一索引数据库报错了?是的,说找到重复的关键字。
从上文我们可以看到,zjj_temp_1表中有两条记录,id都是1.这样是唯一索引是不允许的,所以自然就创建不起来了。
delete from zjj_temp_1 where rownum<2; --删除一行create unique index zjj_temp_1 on zjj_temp_1(id);----继续创建,发现这次成功了。
insert into zjj_temp_1 values(2,'junjie','zhang',25,4000);----成功insert into zjj_temp_1 values(1,'kesi','ma',25,4000);失败!!!耶!就是这样!(3)主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。
该列称为表的主键。
它和唯一索引的共性在于都不允许有重复记录,区别在于,唯一索引是不限制null的,也就是说或可以有一条以上的null值插入,但是主键却限定不能为空。
继续执行语句:insert into zjj_temp_1 values(null,'kesi','ma',25,4000); ---成功select * from zjj_temp_1;这就表明唯一索引是允许有空值的。
Drop index zjj_temp_1; ---删除唯一索引alter table zjj_temp_1 add constraint zjsy_1 primary key(id);---建立主键我们可以发现id有一条记录为空,所以是无法建立主键的。
删除那条空记录就可以了。
(4)聚簇索引和非聚簇索引聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。
由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。
每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。
聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的。
Oracle聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。
非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
由于聚簇索引要按照索引排序,所以一个表最多只能有一个聚簇索引,但可以使用多列。
ORACLE中的聚簇表是指两个表有一个字段完全相同,并且在业务中经常会按这个字段为目标连接这两个表,这时建立聚簇表,两个表公用一个字段,能减少占用空间,并能明显提高连接查询速度。
这两篇都有实际的例子,这里就不再深入讨论了。
建立聚簇索引的思想1、大多数表都应该有聚簇索引或使用分区来降低对表尾页的竞争,在一个高事务的环境中,对最后一页的封锁严重影响系统的吞吐量。
2、在聚簇索引下,数据在物理上按顺序排在数据页上,重复值也排在一起,因而在那些包含范围检查(between、<、<=、<>、>=)或使用group by或orderby的查询时,一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描,可以大大提高查询速度。
3、在一个频繁发生插入操作的表上建立聚簇索引时,不要建在具有单调上升值的列(如IDENTITY)上,否则会经常引起封锁冲突。
4、在聚簇索引中不要包含经常修改的列,因为码值修改后,数据行必须移动到新的位置。
5、选择聚簇索引应基于where子句和连接操作的类型。
具体的聚簇索引请参考以下文章:/s/blog_607b68cc0100f5jo.html/9778796/viewspace-660186二.键1.什么叫键数据库中的键(key)又称为关键字,是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。
2.唯一键唯一键,即一个或者一组列,其中没有重复的记录。
可以唯一标示一条记录。
3.主键属于唯一键,是一个比较特殊的唯一键。
区别在于主键不可为空。
4.外键如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
由此可见,外键表示了两个关系之间的联系。
以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
外键又称作外关键字。
换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。
外键在开发中基本使用不到,主要是数据库用来保证数据的完整性的举个简单的例子表A内有列C1表B内有列C2将C2的外键指向C1那么当你向表B插入数据时,C2的内容必须为C1中的一个还有几个约束需要你设置如删除或者修改表A中的字段时怎么处理表B中相关联的数据举例如下:create table z_laopo (id number(5) primary key,name char(20),age number(3),zhiye char(20)); ----创建老婆表create table z_nanren(id number(5) primary key,name char(20),age number(3),laopo_id number(5),foreign key(laopo_id) references z_laopo(id)); -----创建男人表,并限定laopo_id为老婆表的外键insert into z_laopo values (1,'fengjie',18,'accontant');insert into z_laopo values (2,'cangjingkong',25,'teacher');----向老婆表插入记录insert into z_nanren values (1,'nanren_1',24,1)insert into z_nanren values (2,'nanren_2',24,2)insert into z_nanren values (3,'nanren_3',24,3)----向男人表也插入3条记录前两条没问题,第三条报错:因为不存在id为3的老婆,也即laopo_id只能再1,2之间选择。
除非z_laopo表中有3这个id。
5.父键对于有外键关系的2张表,存在外键的表所参照的表叫主表,而存在外键的表叫从表,上例中z_nanren为从表,z_laopo为主表。
Lao_id为外键,z_laopo表的id为父键。
三.约束像主键、唯一等等其实都是一种约束。