時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
這兩天在大數(shù)據(jù)庫的查詢,有幾個存儲過程查詢下來用了好幾分鐘。一看表,好像索引比較少,就使勁加了些,發(fā)現(xiàn)加了反而查詢速度更慢了。其實我們只要懂得索引的原理便可以知道索引不是想隨便加就加。下面看一下索引的一些原理,我們就可以知道或許你也犯了同樣的加了索引反而速度更慢的錯:
當用戶從數(shù)據(jù)表中查詢數(shù)據(jù)時,Oracle數(shù)據(jù)庫提供了兩種查詢的方式。一是從表中讀取每一行,就是大家常說的全表掃描;二是通過ROWID一此讀取一行。當表中記錄比較多的時候,很明顯第二種方式能夠更快的定位記錄內(nèi)容。而索引其實就是建立在這個查詢原理之上的。如現(xiàn)在某個表中有300多萬條記錄,而現(xiàn)在用戶可能只需要了解其中的10條記錄信息。此時如果使用索引標識讀取的塊,則可以執(zhí)行比較少的I/O,數(shù)據(jù)庫系統(tǒng)會很快找到用戶所需要的內(nèi)容。而如果沒有使用索引的話,則需要讀取表中所有的塊。
如果在這個表中加入了索引,那么到底對數(shù)據(jù)庫的性能影響有多大呢?這個就不好說了,因為其跟很多因素相關(guān)。如跟數(shù)據(jù)選擇性直接相關(guān)。如果用戶的數(shù)據(jù)非常具有選擇性,則表中家功能只有很少的行匹配索引值,則Oracle將能夠快速查詢匹配所引值得ROWID的索引,并且可以快速查詢少量的相關(guān)表快。如還是上面這個表中,其如果存儲有某個市的所有常住人口信息,其中身份證號碼肯定是少不了的。如此時用戶想根據(jù)身份證號碼來查詢某個人的信息時,那么數(shù)據(jù)庫能夠在很短的時間內(nèi)給出響應。這主要是因為用戶提供的數(shù)據(jù)非常具有選擇性,基本上跟數(shù)據(jù)庫中的索引值是一一對應的。而如果用戶想通過出身年月信息來查詢信息的話,則其數(shù)據(jù)庫反映的速度就會比較慢了。
可見索引對數(shù)據(jù)庫性能的影響直接跟數(shù)據(jù)的選擇性掛鉤。這對于數(shù)據(jù)庫管理員設計索引時很有啟發(fā)性。如數(shù)據(jù)庫管理員在設計索引時,最好能夠選擇哪些具有唯一性的字段或者重復性比較少的字段。如此的話,索引對于數(shù)據(jù)庫性能來說才有比較大的價值。
關(guān)鍵詞標簽:oracle
相關(guān)閱讀
熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務器設置Oracle全文檢索
人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法