SQL 列举非索引外键,你想列出含有非索引外键的表。例如,你希望确认 EMP
表的外键是否加入了索引。
SQL 列举非索引外键 问题描述
你想列出含有非索引外键的表。例如,你希望确认 EMP
表的外键是否加入了索引。
SQL 列举非索引外键 解决方案
DB2
查询 SYSCAT.TABCONST
、SYSCAT.KEYCOLUSE
、SYSCAT.INDEXES
和 SYSCAT.INDEXCOLUSE
。
Oracle
查询 SYS.ALL_CONS_COLUMNS
、SYS.ALL_CONSTRAINTS
和 SYS.ALL_IND_COLUMNS
。
查询 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
、INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
、INFORMATION_SCHEMA.COLUMNS
和 PG_CATALOG.PG_INDEXES
。
MySQL
使用 SHOW INDEX
命令获取诸如索引名称、索引列和列位置序号之类的索引信息。除此之外,我们还可以通过查询 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
列出表的外键。对于 MySQL 5 而言,外键虽然默认是加入索引的,但事实上却可以被删掉。要确认外键列的索引是否已经被删除,可以针对特定的表执行 SHOW INDEX
命令,并比较其输出结果与 INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME
的异同。如果 KEY_COLUMN_USAGE
里有对应的 COLUMN_NAME
,但是 SHOW INDEX
输出的结果里却没有,那么就说明该列没有索引。
SQL Server
查询 SYS.TABLES
、SYS.FOREIGN_KEYS
、SYS.COLUMNS
、SYS.INDEXES
和 SYS.INDEX_COLUMNS
。
SQL 列举非索引外键 扩展知识
当修改数据时,每一种数据库的锁机制都不尽相同。如果通过外键实现父子关系,那么为子表里对应的列加上索引有助于减少锁(详情请参考各数据库的帮助文档)。还有一种应用场景:子表和父表常用外键列做连接查询,因而加上索引有助于提升查询性能。