oracle查看某個表的索引 為什么oracle表加索引反而查詢時間長?
為什么oracle表加索引反而查詢時間長?要使用索引查詢一段數(shù)據(jù),首先需要訪問索引數(shù)據(jù),然后訪問表數(shù)據(jù)。如果整個表被掃描兩次,則只訪問表數(shù)據(jù),并且只執(zhí)行一次讀取操作。因此,如果查詢結(jié)果占表數(shù)據(jù)的50%
為什么oracle表加索引反而查詢時間長?
要使用索引查詢一段數(shù)據(jù),首先需要訪問索引數(shù)據(jù),然后訪問表數(shù)據(jù)。如果整個表被掃描兩次,則只訪問表數(shù)據(jù),并且只執(zhí)行一次讀取操作。因此,如果查詢結(jié)果占表數(shù)據(jù)的50%以上,則使用索引的速度會很慢??紤]到單個讀取操作可以讀取多條數(shù)據(jù),而且索引的結(jié)構(gòu)比表的結(jié)構(gòu)復(fù)雜,查詢結(jié)果可能會比較慢,占表數(shù)據(jù)的20%以上,使用索引不如全表掃描。因此,Oracle optimizer需要根據(jù)成本頻繁更新統(tǒng)計(jì)數(shù)據(jù),這便于optimizer判斷使用全表掃描和索引的成本
不應(yīng)有默認(rèn)索引。建立主鍵或索引后,Oracle將在單獨(dú)的區(qū)域中建立索引數(shù)據(jù)。索引數(shù)據(jù)和表數(shù)據(jù)是分開存儲的,而不是一起存儲的。索引數(shù)據(jù)對應(yīng)于表的主鍵或其他索引。例如,如果表中有100條數(shù)據(jù)和一個主鍵,則索引區(qū)域中會有100條數(shù)據(jù)與之對應(yīng),并且因?yàn)樗鼈兪侵麈I數(shù)據(jù),所以每個數(shù)據(jù)都是唯一的,不會重復(fù)。在檢索數(shù)據(jù)時,首先檢索索引區(qū)域,因?yàn)槟抢锏臄?shù)據(jù)較少,所以速度非???。
但是,如果沒有主鍵,則表中可能存在重復(fù)數(shù)據(jù),因此系統(tǒng)不知道自動生成索引的規(guī)則,因此將沒有默認(rèn)索引。Oracle每次都會查詢整個表。