请问索引和外键什么关系?

在百度上搜到的全都是"有外键没索引"
想知道如果建立了索引,却没有建立外键,那么在链接查询中是什么体现呢?

5个回答

外键是用来关联两个表的,索引是用来加速表查询的。

为了优化性能,数据库一般都会对主键创建索引。

外键通俗点讲就像门牌号码,人家要找你必须通过门牌号码去找到你住在哪。索引就像地图,上面记载了各种你设定的门牌号码,你能通过索引快速找到你想要的

主键 是唯一的是用来关联表之间的关系的、外键和 索引是优化性能 快速查找的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
索引外键问题
想请问一下,在同一个表内可以创建多个索引和外键吗?rn比如一个‘教师_课程_学生’表里面有教师ID,课程ID,学生ID,我想把这3个字段和‘教师表’的ID,‘课程表’的ID。‘学生表’的ID关联起来,请问如何实现,谢谢
索引-外键之参照完整性
思考两个问题:问题一:我们有两个表,一个表(department)存放的是部门的信息,例如部门id,部门名称等;另一个表是员工表(staff),员工表里面肯定要存放每个员工所在的部门。那问题来了,如果我们这个时候删除了部门表中的某条记录,在staff表中会发生什么?问题二:是否有必要给外键加索引。为了解答上面的问题,让我们先来回顾一下什么是参照完整性。其实,理解了第一个问题即参照完整性问题,第二个
MYSQL 索引 主键 外键
MYSQL 索引 主键 外键解释: 索引可分为普通索引和唯一索引,主要用于提高访问速度,普通索引允许索引列内容重复,唯一索引不允许重复; 主键具有唯一索引的特性,用于唯一标识记录,一个表只能一个主键; 外键具有普通索引的的特性,是关联表的主键,用于多表级联,维护多表数据一致性。
外键建立索引
请问大家在设计表时都在外键上建立索引么?rn是一个外键一个索引好,还是几个外键建立一个索引?(不考虑唯一性,就是索引)
主键、外键和索引的区别?
主键、外键和索引的区别? 主键、外键和索引的区别 定义: 主键–唯一标识一条记录,不能有重复的,不允许为空 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引–该字段没有重复值,但可以有一个空值 作用: 主键–用来保证数据完整性 外键–用来和其他表建立联系用的 索引–是提高查询排序的速度 个数: 主键–主键只能有一个 外键–一个表可以有多个外键 索引–一...
主键、外键、索引
外键的作用: 外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参照完整性”的数据库实现方式。           外键属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查了。        例如有两个表      A(a,b)   :a为主键,b为外键(来自于B.b)      B(b,
外键是否为索引
我有一个表,不设置主键。rn有一个外键,处理时需要对这个表的外键检索,是不是要对这个外键建立一个索引,还是外键本来就是跟主键一样是一个索引?
phpadmin添加外键索引
phpadmin 给某个表的某个字段添加外键索引 选中数据库  修改字段的sql语句如下:  ALTER TABLE  表名(主表)   ADD FROEIGN KEY (主表中作为外键的字段名) REFERENCES  表2 外键字段在表2中的字段名 表1  student  id name age sex class_id 表2 class id name  class_id是
外键与索引相关操作
删除外键 alter table tablename drop foreign key keyname; 添加外键 alter table tablename add constraint foreign key(id) references parent(id); keyname可通过 show index from tablename; 查询 删除索引 ...
第10章 索引与外键
索引长度计算单位为字节。 varchar等长度计算为字符。 create index cityname on city(city(10));前缀索引 索引原则: 1,高离散度 2,用段索引,如:char(200) -> char(10) 3,多列索引的最左前缀 4,不过度索引:1,影响数据变更;2:影响查询计划 5,InnoDb普通索引都会保存主键的值,所以主键尽量简短
视图-主外键-索引
视图-主外键-索引
Oracle外键的索引影响
今天 ,Cisco的MES表中遇到了一个执行效率很慢的问题,发现主表和子表关联时使用了外键,但是当外键缺失索引,子表进行全表扫描。遇到使用外键的情况,要检查一下外键是否已经建立索引。 在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引。 外键列上缺少索引会带来:限制并发性、影响查询性能等问题。 1. 影响查询性能。 如果子表外键没有创...
外键未加索引
Dear All:rn 最近学习TOM大作时,遇到一点疑惑。描述如下:rn父表Deptrn(1、DEPTNO字段为PK)rncreate table DEPTrn(rn DEPTNO NUMBER(2) not null,rn DNAME VARCHAR2(14),rn LOC VARCHAR2(13)rn)rnrn子表Emprn(1、DEPTNO字段为FK,且设置了级联删除rn 2、DEPTNO当前不存在索引)rncreate table EMPrn(rn EMPNO NUMBER(4) not null,rn ENAME VARCHAR2(10),rn JOB VARCHAR2(9),rn MGR NUMBER(4),rn HIREDATE DATE,rn SAL NUMBER(7,2),rn COMM NUMBER(7,2),rn DEPTNO NUMBER(2)rn)rnalter table EMPrn add constraint FK_DEPTNO foreign key (DEPTNO)rn references DEPT (DEPTNO) on delete cascade;rn下面针对子表外键没有和增加索引的情况,进行测试。rnrn情况1:子表外键没有索引rnrn会话1(测试父表DEPT的DML操作):rnSQL> delete from dept where deptno = 10;rnrn1 row deletedrnrnSQL> select sid, type,b.object_name,rn 2 decode(lmode,0,'None',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X') hold_lock,rn 3 decode(request,0,'None',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X') request_lockrn 4 from v$lock, user_objects brn 5 where b.object_id(+) = id1rn 6 and sid = (select sid from v$mystat where rownum =1);rnrn SID TYPE OBJECT_NAME HOLD_LOCK REQUEST_LOCKrn---------- ---- -------------------------------------------------------------------------------- --------- ------------rn 154 TM DEPT RX Nonern 154 TM EMP RX Nonern 154 TX X NonernrnSQL> rollback;rnrnRollback completernrnSQL> update dept set dname = upper(dname) where deptno = 10;rnrn1 row updatedrn rnSQL> select sid, type,b.object_name,rn 2 decode(lmode,0,'None',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X') hold_lock,rn 3 decode(request,0,'None',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X') request_lockrn 4 from v$lock, user_objects brn 5 where b.object_id(+) = id1rn 6 and sid = (select sid from v$mystat where rownum =1);rnrn SID TYPE OBJECT_NAME HOLD_LOCK REQUEST_LOCKrn---------- ---- -------------------------------------------------------------------------------- --------- ------------rn 154 TM DEPT RX Nonern 154 TX rnrn结论:rn1、对父表DEPT进行DELETE操作,子表EMP增加了RX级别的TM锁。rn2、对父表DEPT的进行UPDATE操作,子表EMP未增加锁。rnrnrn情况2:子表EMP外键增加索引rn(注:测试过程中,FK的索引 已使用过 NORMAL 和 BITMAP 两种类型,以下用NORMAL索引为例)rncreate index FK_EMP_IDEX on EMP (DEPTNO) tablespace USERS..rnrn会话1:rnSQL> delete from dept where deptno = 10;rnrn1 row deletedrnrnSQL> rnSQL> select sid, type,b.object_name,rn 2 decode(lmode,0,'None',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X') hold_lock,rn 3 decode(request,0,'None',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X') request_lockrn 4 from v$lock, user_objects brn 5 where b.object_id(+) = id1rn 6 and sid = (select sid from v$mystat where rownum =1);rnrn SID TYPE OBJECT_NAME HOLD_LOCK REQUEST_LOCKrn---------- ---- -------------------------------------------------------------------------------- --------- ------------rn 133 TM DEPT RX Nonern 133 TM EMP RX Nonern 133 TX rnrn结论:rn1、对FK增加索引后,父表DEPT的DELETE操作,子表EMP依然被锁。rnrnrn问题:rn按测试结果来看,rn1、子表FK未加索引时,对父表的UPDATE时,子表不会被锁定。rn假设父表更新的是主键 update dept set deptno = deptno + 2 where dept = 10;rn如果该主键值在子表中有引用,则UPDATE语句违反了外键完整性约束。rnrn如果该主键值在子表中没引用,则UPDATE语句也不会将子表锁定。rnrn这与TOM所说“如果更新父表的主键,由于外键没有索引,子表会被锁住” 就有矛盾了????rnrn2、子表FK增加索引后,对父表的DELETE,仍就导致子表被锁定????rnrn
PowerDesigner创建索引与外键
一、创建索引 双击Table-》Columns-》创建索引 Step1:双击Table Step2:选择Columns-》创建索引 弹出如下窗口: Step3:选择columns标签 Step4:选择Add Columns.. Step5:勾选要作为索引的列即可。 二、创建外键 如有二张表A和表B,A表b_id是外键,指向B表主键b_id          ...
关于MySQL 外键索引
关于MySQL 外键索引的几种情况的分析
主键 外键 索引
主键是一个数据库表中的唯一标识,想必都比较了解。外键和索引作为表与表之间的联系枢纽,大家对此褒贬不一,很多人已弃用外键和索引,而是在代码层面进行表与表之间的关联。 主键(primary key) 主键能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主
SQL 之 外键、索引
一、外键: 从一个表的一个列到另一个不同的表中的一个列的直接引用。 设置一个外键时,要求指定两个列,配置了外键列的表为子表,另一个表中被引用的列则位于父表中。不允许先删除父表,子表必须依赖父表。 设置外键,可以为父表中涉及到更新和操作的行设置一些具体的行为。比如外键CustomerID (1)No Action:默认行为,如果把列CustomerID的更新设置为No Action,意味着任
主键、外键和索引的区别
定义:主键:唯一标识一条记录,不能有重复的,不允许为空外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值索引:该字段没有重复值,但可以有一个空值作用:主键:用来保证数据完整性外键:用来和其他表建立联系用的索引:是提高查询排序的速度个数:主键:主键只能有一个外键:一个表可以有多个外键索引:一个表可以有多个唯一索引添加:主键:ALTER TABLE “表名” ADD PRIMARY KEY
mysql外键索引
mysql在创建外键的时候会自动添加索引,oracle就不会,这样避免了死锁的产生,提高查询效率 mysql> create table f(id int primary key); Query OK, 0 rows affected (0.05 sec) mysql> create table c(id int , foreign key(id) references f(id))
主键?外键?索引?(急!!!)
请教问题,这3者的联系和区别是什么??最好是举例说明,请赐教!
数据库 主键 外键 索引
这篇文章写的很好 https://blog.csdn.net/bingqingsuimeng/article/details/51595560
Mysql主键外键索引
1.主键外键 2.主键详情 3.思考对比 主表:对于两个表的桥梁的关键字 就是一个“公共关键字”,公共关键字设为主键的表为“父表”(主表) 一般为小表 内容少的 从表:另一个是外键就是为“从表”,故该公共关键字为从表的“外键”; 主键:唯一的; 一个表中的一条字段的唯一标识 小表中的一个字段 可以这样说 小表(主表)的唯一主键 外键:从表 大表中的一个字段 可以这...
删除子表外键及索引
#删除子表外键 ALTER TABLE student DROP FOREIGN KEY FK_gradeId; #删除外键索引 ALTER TABLE student DROP INDEX FK_gradeId;
MySQL主键、外键、索引
主键、外键、索引简单介绍
关于数据库主键和外键
二、  主键、外键和索引的区别  主键、外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值 ...
请问不想建立主外键的表间用什么关系?
我的人员信息表里有些项目,想填写的时候直接引用其他表里的字段。rn比如省分、国家。这些打算专门建一个表,填表的时候可以用下拉选单来选择。rn但是考虑到数据库查询代码编写的复杂,及数据库的速度。我打算这些东西仅仅在填表时作为参考,直接把其内容放到人员信息的相应字段里,不建立引用关系。rn请问这个在PD里pdm模式下如何画两者间的关系。是不是单独把国籍列表和省列表放到一边就可以了?rn谢谢
mysql 创建 表 索引 外键
创建表1.如果是5.6以下timestamp(3)改为timestamp不然报错create table ACT_RE_MODEL (    ID_ varchar(64) not null,    REV_ integer,    NAME_ varchar(255),    KEY_ varchar(255),    CATEGORY_ varchar(255),    CREATE_TIME...
ORACLE外键必须加索引
外键加索引是常识,必须牢记。
mysql建表-主键-索引-外键
create table employees ( id int(5) not null auto_increment , name varchar(8) not null, primary key (id) ) type=innodb; create table payroll( id int(5) not null, emp_id int(5) not null, na...
关于mysql外键与索引的问题
我现在用的是mysql数据库,数据引擎是innodb的,但却发现一个令人郁闷的问题:每次我在一张表上建立一个外键,它就在这张表上为该外键建一个索引,而这个索引完全是不必要的。我想问一下,有什么办法可以解决这一问题吗?rn比如订单表中有外键产品ID,实际上产品ID是产品表的主键,自然也是产品表的索引,所以我没必要到订单表中也为产品ID建一个索引呀。
数据库主键、外键和索引理解
    主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值 作用: 用来保证数据完整性 用来和其他表建立联系用的 是提高查询排序的速度 个数: 主键只能有一个 一个表可以有多个外键 一个表可以有多个惟一...
关于主键与外键的索引问题
请问ORACLE会自动为主键和外键建立索引吗?
数据库的视图、事务、索引、外键
视图 将内关联或自关联的表创建成另一个表 (select * from students as a inner join classes as b on a.cls_id=b.id) >create view v_students as (select...) 视图本质就是对查询的封装 定义视图,建议以v_开头 >create view 视图名称 as select语句; 查看视图...
mysql关联查询 事务 索引 外键
连接查询 连接查询分类如下: 表A inner join 表B:表A与表B匹配的行会出现在结果中 表A left join 表B:表A与表B匹配的行会出现在结果中,外加表A中独有的数据,未对应的数据使用null填充 表A right join 表B:表A与表B匹配的行会出现在结果中,外加表B中独有的数据,未对应的数据使用null填充 在查询或条件中推荐使用“表名.列名”的语法 如果多个表中列名不...
关于主键、外键、索引的问题
1.在一个表中可不可以有两个主键?rn2.在一个表中最多可以有多少个索引和外键?
关于mysql中的外键和索引
我使用的是mysql 5.5, 使用的engine是innodb, 在创建外键的时候,innodb帮着自动创建了索引. rn在创建外键但不指定其约束名字的情况下,外键名字和索引名字是不一样的;rn在创建外键且指定约束名字的情况下,外键名字和索引名字是一样的。rn我的问题是,创建外键的时候不指定约束名字,通过什么途径能够知道这个外键关联的索引是哪个?rn目前我知道的方法是show create table tableName; 请问有没有其他的方法?非常感谢。rnrn[code=sql]rncreate database test; rnuse test; rncreate table t1(a int, b int, primary key(a,b)); rncreate table t2(a int, b int, foreign key(a,b) references t1(a,b)); rncreate table t3(a int, b int, constraint f_t3 foreign key(a, b) references t1(a,b)); rnshow create table t2; rnshow create table t3; rn[/code]rnrnrnmysql> show create table t2; rn+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+rn| Table | Create Table |rn+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+rn| t2 | CREATE TABLE `t2` (rn `a` int(11) DEFAULT NULL,rn `b` int(11) DEFAULT NULL,rn KEY [color=#FF0000]`a`[/color] (`a`,`b`),rn CONSTRAINT [color=#FF0000]`t2_ibfk_1`[/color] FOREIGN KEY (`a`, `b`) REFERENCES `t1` (`a`, `b`)rn) ENGINE=InnoDB DEFAULT CHARSET=gbk |rn+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+rn1 row in set (0.00 sec)rnrnmysql> show create table t3; rn+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+rn| Table | Create Table |rn+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+rn| t3 | CREATE TABLE `t3` (rn `a` int(11) DEFAULT NULL,rn `b` int(11) DEFAULT NULL,rn KEY [color=#99CC00]`f_t3`[/color] (`a`,`b`),rn CONSTRAINT [color=#99CC00]`f_t3`[/color] FOREIGN KEY (`a`, `b`) REFERENCES `t1` (`a`, `b`)rn) ENGINE=InnoDB DEFAULT CHARSET=gbk |rn+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+rn1 row in set (0.00 sec)rn
外键做索引合适吗?
这个column(主码)可能被多个表参照约束。我们一般是否对对他建立索引?
数据库中主键,外键,索引
数据库表中适合建立索引的字段: 主键和外键,建立索引是为了更好的查询,比较适合建立索引,为了在查询和排序分组时使用:where,orderby,group by 。Where子句中的字段建立索引为了减少数据检索。Select中的字段无需建立索引。
Oracle 主键外键唯一索引索引
1.查询索引  select table_name,index_name from user_indexes where table_name=upper('test_temp1'); 2.创建主键  (1)创建表的时候创建:   create table test_temp1(id int primary key,name varchar2(20));   create table t
mysql:主键、外键、索引(一)
干货: 主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。可以使用多个列作为联合主键,但联合主键并不常用。 关系数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。 通过对数据库表创建索引,可以提高查询速度。通过创建唯一索引,可以保...
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件