Q
未編入索引外鍵
1
A
回答
4
沒有命令行命令(據我所知),該做的。但你可以推出自己的。基本上你需要一個查詢來檢查這些數據庫,這實際上是你的GUI工具必須做的。該查詢將類似於:
SELECT FK.table_name, FK.constraint_name
FROM user_constraints FK
WHERE FK.constraint_type = 'R'
AND EXISTS
( SELECT FC.position, FC.column_name
FROM user_cons_columns FC
WHERE FC.constraint_name = FK.constraint_name
MINUS
SELECT IC.column_position AS position, IC.column_name
FROM user_ind_columns IC
WHERE IC.table_name = FK.table_name
)
注意:此SQL不完美。可能會出現這種情況,因爲有人認爲索引下注並不是真的。多個不同的索引與列在正確的地方可以欺騙它。要正確地做到這一點,您需要開始將內聯視圖分組或使用分析函數來確保所有索引列來自同一索引。所以我把它放在這個簡單的版本上,這個版本大部分時間都是可用的。
然後你可以在sqlplus中運行這個SQL,或者你可以將它嵌入到一個可以很容易地從命令行運行的shell腳本中。粗之一將是:
#!/bin/bash -ue
LOGIN="$1"
sqlplus -s << END_SQL
$LOGIN
SET PAGESIZE 5000
SELECT FK.table_name, FK.constraint_name
FROM user_constraints FK
WHERE FK.constraint_type = 'R'
AND EXISTS
( SELECT FC.position, FC.column_name
FROM user_cons_columns FC
WHERE FC.constraint_name = FK.constraint_name
MINUS
SELECT IC.column_position AS position, IC.column_name
FROM user_ind_columns IC
WHERE IC.table_name = FK.table_name
)
/
END_SQL
然後你就可以像這樣運行,並得到了基本結果:
[[email protected] sql]$ ./fk.sh scott/[email protected]
TABLE_NAME CONSTRAINT_NAME
------------------------------ ------------------------------
EMP FK_DEPTNO
3
下面是一個腳本,應該正確每次上班,史蒂夫·亞當斯的禮遇:
-------------------------------------------------------------------------------
--
-- Script: missing_fk_indexes.sql
-- Purpose: to check for locking problems with missing foriegn key indexes
-- For: 8.1 and higher
--
-- Copyright: (c) Ixora Pty Ltd
-- Author: Steve Adams
--
-------------------------------------------------------------------------------
@save_sqlplus_settings
column constraint_name noprint
column table_name format a48
break on constraint_name skip 1 on table_name
select /*+ ordered */
n.name constraint_name,
u.name ||'.'|| o.name table_name,
c.name column_name
from
(
select /*+ ordered */ distinct
cd.con#,
cd.obj#
from
sys.cdef$ cd,
sys.tab$ t
where
cd.type# = 4 and -- foriegn key
t.obj# = cd.robj# and
bitand(t.flags, 6) = 0 and -- table locks enabled
not exists ( -- not indexed
select
null
from
sys.ccol$ cc,
sys.ind$ i,
sys.icol$ ic
where
cc.con# = cd.con# and
i.bo# = cc.obj# and
bitand(i.flags, 1049) = 0 and -- index must be valid
ic.obj# = i.obj# and
ic.intcol# = cc.intcol#
group by
i.obj#
having
sum(ic.pos#) = (cd.cols * cd.cols + cd.cols)/2
)
) fk,
sys.obj$ o,
sys.user$ u,
sys.ccol$ cc,
sys.col$ c,
sys.con$ n
where
o.obj# = fk.obj# and
o.owner# != 0 and -- ignore SYS
u.user# = o.owner# and
cc.con# = fk.con# and
c.obj# = cc.obj# and
c.intcol# = cc.intcol# and
n.con# = fk.con#
order by
2, 1, 3
/
@restore_sqlplus_settings
希望有所幫助。
相關問題
- 1. 索引外鍵
- 2. 網站未編入索引
- 3. MySql外鍵索引
- 4. 外鍵和索引
- 5. 索引外鍵列
- 6. 外鍵和索引
- 7. MySQL的 - 插入與外鍵索引
- 8. 數組中的值未編入索引
- 9. dBase IV數據庫未編入索引
- 10. 索引變量和外鍵
- 11. 外鍵和索引問題
- 12. 每個外鍵的索引?
- 13. 聚集索引的外鍵VS主鍵
- 14. 外鍵和主鍵Postgres和索引
- 15. 刪除未使用的外鍵索引的缺點?
- 16. 如何在SQL Server中查找未索引的外鍵
- 17. 將大型表上的外鍵編入索引的最佳做法
- 18. Ruby on Rails - 主鍵以外的參考索引的外鍵
- 19. 索引中選擇一個外鍵
- 20. 索引每列添加外鍵
- 21. 外鍵在mySQL中必須是索引?
- 22. django模型外鍵創建索引
- 23. 索引外鍵優化查詢
- 24. SQL Server 2005外鍵和索引
- 25. 實體框架4.1 - 外鍵索引?
- 26. 每個外鍵的唯一索引
- 27. MySql - Innodb - 腐敗索引/外鍵
- 28. Solr Haystack中的Django外鍵索引
- 29. 非唯一索引中的外鍵? (oracle)
- 30. EF6防止不創建外鍵索引
這是我將堅持GUI。 –