关于外键字段是否要加索引的问题

wangweilie 2003-04-08 05:13:57
创建两个表
1.DefInspectItem表 其中字段 ID 为主键
2.DataInspect表 其中字段 ItemId 为引用DefInspectItem.Id的外键,我为该字段加上了可以重复的所引

然后我用Visio的反向工程,创建了数据库模型,在使用模型分析功能时给出如下的告警提示

D:\绘图1 : 警告 L4001:“DefInspectItemDataInspect”:表“DataInspect”上
的索引和索引“ItemId”(在同一表上)相同。

再示用DDL生成功能关于该字段有如下两条SQL语句

create index `ItemId` on `DataInspect` (
`ItemId` ASC);

alter table `DataInspect`
add constraint `DefInspectItemDataInspect` foreign key (
`ItemId`)
references `DefInspectItem` (
`ID`);

-------------------------------------------------------------
请问高手,我为ItemId创建的索引是否是个多余的对象?foreign key 在查询时是否可以和索引对象一样提高查询速度?
...全文
434 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_rose 2003-04-09
  • 打赏
  • 举报
回复
但是,那些以“_WA_”开头的索引可能不能自动更新。
w_rose 2003-04-09
  • 打赏
  • 举报
回复
select * from sysindexes where id=object_id('<你的表名>')

你会看到很多你在别处看不到的索引。
wangweilie 2003-04-09
  • 打赏
  • 举报
回复
检查发现外键实际上建了索引对象,看来sql server再对该外键上再加索引是多余的了。

我在Access数据库上察看外键字段的所引,发现外键的约束关系不是所引,但Visio按Access驱动来分析时同样指出在外键字段加索引是多余的,我想微软的产品对自己的数据库分析应该没错吧!

再讨论一下就开始结账
pengdali 2003-04-08
  • 打赏
  • 举报
回复
你建好外键约束后,右键你的表-->索引-->看看有没有索引??
wangweilie 2003-04-08
  • 打赏
  • 举报
回复
但是从visio的分析来看,似乎将外键约束当作索引对象了

D:\绘图1 : 警告 L4001:“DefInspectItemDataInspect”:表“DataInspect”上
的索引和索引“ItemId”(在同一表上)相同。
pengdali 2003-04-08
  • 打赏
  • 举报
回复
外键是约束,关系,索引才是提高检索速度的!
leimin 2003-04-08
  • 打赏
  • 举报
回复
外键索引不是多余的对象,在外键查询是会显著提高检索的速度!
tjan 2003-04-08
  • 打赏
  • 举报
回复
肯定会提高速度的

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧