2012-02-13 15 views
19

Oracle üzerinde gelişmeye devam ediyorum. FOREIGN KEY kısıtlamalarını tanımladığım birkaç tablo var. Zaten bu SQL Server yönelimli ve bu MySQL yönelimli soruları okudum ama Oracle hakkında hiçbir şey bulamadım.Oracle, FOREIGN KEY sütunları için otomatik olarak ikincil bir dizin oluşturur mu?

Soru her zaman aynıdır: sorgu performansını en iyi duruma getirmek için, bir FOREIGN KEY kısıtlaması oluşturduğum sütunlar için, açık bir ikincil dizin oluşturmam gerekir mi? Oracle, JOIN'ler sırasında performansları artırmak için otomatik olarak FOREIGN KEY sütunlarına bir indeks oluşturmaz mı?

Genellikle WHERE deyiminin bu sütunlarla karşılaştırıldığı sorgulamalar yapıyorum.

+1

Hayır, öyle değil. Örneğin, bu [bakın] (http://stackoverflow.com/questions/4127206/do-i-need-to-create-indexes-on-foreign-keys). –

cevap

18

Hayır, Oracle, muhtemelen% 99 oranında olması gereken durumlarda bile, yabancı anahtar sütunlarında otomatik olarak dizin oluşturmaz. Sorgulara yardımcı olmanın yanı sıra, dizin ayrıca üst tablodaki silme ifadelerinin performansını da artırır.

+1

Bu endeksler korunacak bir maliyete sahiptir ve bunları oluşturmamanın en iyi olduğu zamanlar vardır. Şahsen onları varsayılan olarak oluşturması gerektiğinden şüpheleniyorum ve isterseniz bunları bırakmanıza izin verin, ancak Oracle, yaptığı gibi davranan tek DB'den uzaktır. PostgreSQL, bir yabancı anahtar ilişkisinin referans tarafı için otomatik olarak dizin oluşturmaz. –

İlgili konular