由於公司電子商務**平台版本老化,且使用oracle資料庫,前期dba在設計資料庫建表結構時候存在一定的問題,對索引的使用不夠重視,大致資料的查詢比較慢(當然也有一些由於使用hibernate中不夠重視[color=red]oracle採用自下而上的順序解 析where子句,根據這個原理,表之間的連線必須寫在其他 where條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在where子句的末尾 等問題[/color]),現從偉大的網際網路淘到了如下建議:
1、表的主鍵、外來鍵必須有索引;
2、資料量超過300的表應該有索引;
3、經常與其他表進行連線的表,在連線欄位上應該建立索引;
4、經常出現在where子句中的字段,特別是大表的字段,應該建立索引;
5、索引應該建在選擇性高的字段上;
6、索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引;
7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:
a、正確選擇復合索引中的主列字段,一般是選擇性較好的字段;
b、復合索引的幾個字段是否經常同時以and方式出現在where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引;
c、如果復合索引中包含的字段經常單獨出現在where子句中,則分解為多個單字段索引;
d、如果復合索引所包含的字段超過3個,那麼仔細考慮其必要性,考慮減少復合的字段;
[color=red] e、如果既有單字段索引,又有這幾個欄位上的復合索引,一般可以刪除復合索引;
f、在查詢語句中,where條件中使用到單字段索引,無論它的位置在**都會使用到單字段索引
g、在查詢語句中,where條件中出現且僅出現復合索引,只要復合索引表中的第乙個字段出現即可成功使用
h、在查詢語句中,where條件中既出現到復合索引又出現到單字段索引,如果僅出現復合索引的乙個字段,那麼oracle一般使用單字段索引,如果正確出現復合索引中的多個字段,那麼oracle一般使用復合索引[/color]
8、頻繁進行資料操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執行計畫造成負面影響;以上是一些普遍的建立索引時的判斷依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對效能都毫無益處:在表上建立的每個索引都會增加儲存開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低資料增加刪除時的效能,特別是對頻繁更新的表來說,負面影響更大。
[color=red]hibernate雖然存在大家喊的這樣那樣的問題,但是如果合理使用hibernate,夯實基礎也沒有大家說的那麼差,當然網際網路還是建議使用ibatis類似的orm framework。[/color]
oracle資料庫建立索引
系統中有一張記錄登入和登出的日誌表,時間長了之後,資料量很大,又沒有歷史表。而客戶端登入時都會去資料庫查詢使用者上次登入的ip和時間,由於沒有索引所以很慢有時侯。故需要對此表加入索引,一提高查詢效率 首先先查下表中存在哪些索引 select index name from all indexes w...
oracle 資料庫如何建立索引 如何用索引
我現在有乙個sql語句 select faqid,faqname,type,creator,toquestion,supercode from t kbs faq t where type 1 and faqid faqid and faqname like faqname and creator ...
資料庫建立索引
建立索引 學生學號建立聚集索引 create unique clustered index ix student id on student studentid 規則 create unique clustered nonclustered index 索引名 on 表名 檢視名 索引列名,asc ...