首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何索引MS SQL中的所有外键?

在MS SQL中,可以使用以下查询来索引所有外键:

代码语言:sql
复制
SELECT 
    OBJECT_NAME(f.parent_object_id) AS '表名',
    COL_NAME(fc.parent_object_id, fc.parent_column_id) AS '列名',
    OBJECT_NAME(f.referenced_object_id) AS '关联表名',
    COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS '关联列名',
    i.name AS '索引名'
FROM 
    sys.foreign_keys AS f
INNER JOIN 
    sys.foreign_key_columns AS fc ON f.object_id = fc.constraint_object_id
INNER JOIN 
    sys.indexes AS i ON f.referenced_object_id = i.object_id AND fc.referenced_column_id = i.column_id
ORDER BY 
    '表名', '列名';

这个查询会返回所有表中的外键信息,包括表名、列名、关联表名、关联列名和索引名。通过这些信息,可以了解到外键的结构和关系。

在腾讯云的数据库产品中,可以使用云数据库SQL Server来管理和操作MS SQL数据库。云数据库SQL Server提供了高可用、高性能、安全可靠的数据库服务,适用于各种规模的应用场景。您可以通过以下链接了解更多关于腾讯云数据库SQL Server的信息:

腾讯云数据库SQL Server

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • SQL Server的六种数据移动方法

    1.通过工具DTS的设计器进行导入或导出       DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行SQL   Server数据库中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动。在SQL   Server   Enterprise   Manager中,展开服务器左边的+,选择数据库,右击,选择All   tasks/Import   Data...(或All   tasks/Export   Data...),进入向导模式,按提示一步一步走就行了,里面分得很细,可以灵活的在不同数据源之间复制数据,很方便的。而且可以另存成DTS包,如果以后还有相同的复制任务,直接运行DTS包就行,省时省力。也可以直接打开DTS设计器,方法是展开服务器名称下面的Data   Transformation   Services,选Local   Packages,在右边的窗口中右击,选New   Package,就打开了DTS设计器。值得注意的是:如果源数据库要拷贝的表有外键,注意移动的顺序,有时要分批移动,否则外键主键,索引可能丢失,移动的时候选项旁边的提示说的很明白,或者一次性的复制到目标数据库中,再重新建立外键,主键,索引。         其实建立数据库时,建立外键,主键,索引的文件应该和建表文件分开,而且用的数据文件也分开,并分别放在不同的驱动器上,有利于数据库的优化。         2.   利用Bcp工具         这种工具虽然在SQL   Server7的版本中不推荐使用,但许多数据库管理员仍很喜欢用它,尤其是用过SQL   Server早期版本的人。Bcp有局限性,首先它的界面不是图形化的,其次它只是在SQL   Server的表(视图)与文本文件之间进行复制,但它的优点是性能好,开销小,占用内存少,速度快。有兴趣的朋友可以查参考手册。         3.   利用备份和恢复         先对源数据库进行完全备份,备份到一个设备(device)上,然后把备份文件复制到目的服务器上(恢复的速度快),进行数据库的恢复操作,在恢复的数据库名中填上源数据库的名字(名字必须相同),选择强制型恢复(可以覆盖以前数据库的选项),在选择从设备中进行恢复,浏览时选中备份的文件就行了。这种方法可以完全恢复数据库,包括外键,主键,索引。       4.   直接拷贝数据文件         把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL   Server   Query   Analyzer中用语句进行恢复:     EXEC   sp_attach_db   @dbname   =   ’test’,     @filename1   =   ’d:mssql7data   est_data.mdf’,     @filename2   =   ’d:mssql7data   est_log.ldf’         这样就把test数据库附加到SQL   Server中,可以照常使用。如果不想用原来的日志文件,可以用如下的命令:       EXEC   sp_detach_db   @dbname   =   ’test’     EXEC   sp_attach_single_file_db   @dbname   =   ’test’,     @physname   =   ’d:mssql7data   est_data.mdf’         这个语句的作用是仅仅加载数据文件,日志文件可以由SQL   Server数据库自动添加,但是原来的日志文件中记录的数据就丢失了。         5.   在应用程序中定制         可以在应用程序(PB、VB)中执行自己编写的程序,也可以在Query   Analyzer中执行,这种方法比较灵活,其实是利用一个平台连接到数据库,在平台中用的主要时SQL语句,这种方法对数据库的影响小,但是如果用到远程链接服务器,要求网络之间的传输性能好,一般有两种语句:     1>select   ...   into   new_tablename   where   ...     2>insert   (into)   old_tablename   select   ...   from   ...   where   ...       区别是前者把数据插入一个新表(先建立表,再插入数据),后者是把数据插入已经存在的一个表中,我个人喜欢后者,因为在编程的结构上,应用的范围上,第二条语句强于前者。         6.

    03

    《数据库索引设计优化》读书笔记(五)

    分析: A为父表,B为子表,两个表做主外键关联查询,只有主键和外键上有索引,并且A表的主键索引和B表的外键索引为聚簇索引。 以A作为外层表做嵌套循环连接计算响应时间: 第1步:通过聚簇索引AK访问A表 索引 AK TR = 1 TS = 10000000 LTR 1 * 10ms + 10000000 * 0.01ms = 100s 第2步:通过聚簇索引AK访问B表 索引 AK TR = 10000000 * 1% = 100000 TS = 100000 * 5 = 500000 LTR 100000 * 10ms + 100000 * 5 * 0.01ms = 1005s 第3步:提取数据 50000000 * 1% * 0.001% * 0.1ms = 0.5ms 所以以A作为外层表做嵌套循环连接响应时间约为1105(100 + 1005)秒 以B作为外层表做嵌套循环连接计算响应时间: 第1步:通过聚簇索引AK访问B表 索引 AK TR = 1 TS = 50000000 LTR 1 * 10ms + 50000000 * 0.01ms = 500s 第2步:通过聚簇索引AK访问A表 索引 AK TR = 50000000 * 0.001% = 500 TS = 500 LTR 500 * 10ms + 500 * 0.01ms = 5s 第3步:提取数据 50000000 * 1% * 0.001% * 0.1ms = 0.5ms 所以以B作为外层表做嵌套循环连接响应时间约为505(500 + 5)秒 8.2 在不添加冗余字段的前提下,为该连接设计最佳索引并评估响应时间。 分析: 因为B1 > :B1的FF很小,仅为0.001%,所以可以建立以B1为前缀的宽索引(B1,AK,B2) 以B作为外层表做嵌套循环连接计算响应时间: 第1步:通过索引B1访问B表,因为B1是宽索引,所以无需回表访问 索引 B1 TR = 1 TS = 50000000 * 0.001% = 500 LTR 1 * 10ms + 500 * 0.01ms = 15ms 第2步:通过聚簇索引AK访问A表 索引 AK TR = 500 TS = 500 LTR 500 * 10ms + 500 * 0.01ms = 5005ms 第3步:提取数据 50000000 * 1% * 0.001% * 0.1ms = 0.5ms 所以使用B1上的宽索引(B1,AK,B2),以B作为外层表做嵌套循环连接响应时间约为5((15+5005+0.5)/1000)秒。

    02

    PowerDesigner 的常用方法(转)

    选择Database—>Edit Current DBMS 选择Scripts-》Objects-》Reference-》ConstName 可以发现右侧的Value为: FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT% 可见,该命名方法是:'FK_'+8位子表名+9位Reference名+8位父表名,你可以根据这中模式自定义为: FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT%, 可以使FK名称变为FK_TABLE_2_RELATIONS_TABLE_1 掌握这种方法后就可以按照自己的想法修改了 生成建库脚本SQL文件中的表头注释很讨厌,可以在 Databse -> Generate Database (Ctrl+G)窗口中,选择Options卡片,去掉Usage的Title钩选项即可。 添加外键 Model -> References新建一条外键后,双击进入外键属性,在“Joins”卡片中可以选择子表的外键字段

    03

    从trc查找死锁的问题

    *** 2013-09-29 01:03:47.762 *** SERVICE NAME:(SYS$USERS) 2013-09-29 01:03:47.744 *** SESSION ID:(997.178) 2013-09-29 01:03:47.744 DEADLOCK DETECTED ( ORA-00060 ) [Transaction Deadlock] The following deadlock is not an ORACLE error. It is a deadlock due to user error in the design of an application or from issuing incorrect ad-hoc SQL. The following information may aid in determining the deadlock: Deadlock graph:                        ---------Blocker(s)--------  ---------Waiter(s)--------- Resource Name          process session holds waits  process session holds waits TX-005d002f-000046dd       113     997     X            182     786           X TX-004d0026-00009b4e       182     786     X            113     997           X session 997: DID 0001-0071-00000006 session 786: DID 0001-00B6-0000064E session 786: DID 0001-00B6-0000064E session 997: DID 0001-0071-00000006 Rows waited on: Session 786: obj - rowid = 0002D33A - AAAtM6AAdAAAJ9BABO   (dictionary objn - 185146, file - 29, block - 40769, slot - 78) Session 997: obj - rowid = 000527D6 - AABSfWAAdAACmKAAAe   (dictionary objn - 337878, file - 29, block - 680576, slot - 30) Information on the OTHER waiting sessions: Session 786:   pid=182 serial=10783 audsid=64898626 user: 96/GALT   O/S info: user: batch, term: , ospid: 23674, machine: v490c1-app             program: sqlplus@v490c1-app (TNS V1-V3)   application name: SQL*Plus, hash value=3669949024   Current SQL Statement:   DELETE FROM ANA A WHERE EXISTS (SELECT 1 FROM (SELECT LOCATOR_ID FROM (SELECT T.LOCATOR_ID,ROWNUM RN FROM TEMP T ) WHERE RN > :B2 AND RN <= :B1 ) B WHERE A.LOCATOR_ID = B.LOCATOR_ID) End of information on OTHER waiting sessions. Current SQL statement for this session: update ana_seg set    SEGMENT_ID = :1, SEAT_STATUS = :2, SEGMENT_CLASS = :3, SEGMENT_SHARE_CLASS = :4, SEG_SEAT_NO = :5, SEG_CREATION_NUM= :6, SEG_CREATION_TIME = :7 where locator_id = :8 and SEG_ORDER_ID = :9

    02
    领券