Hibernate使用索引及索引新增原則

2021-08-21 12:38:17 字數 1810 閱讀 7216

1)表上加索引

@table(name = "t_s_user",indexes=)

public class user

2)關聯表上加索引

/**

* 試驗點:用於資料許可權控制

*/

@manytomany

@fetch(fetchmode.subselect)

@jointable(name = "t_s_user_triallocation",

joincolumns = , indexes=,

inversejoincolumns = )

@orderby("code")

private listtriallocationlist = new arraylist();

1、表的主鍵、外來鍵必須有索引;

2、資料量超過300的表應該有索引;

3、經常與其他表進行連線的表,在連線欄位上應該建立索引;

4、經常出現在where子句中的字段,特別是大表的字段,應該建立索引;

5、索引應該建在選擇性高的字段上;

6、索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引;

7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:

a、正確選擇復合索引中的主列字段,一般是選擇性較好的字段;

b、復合索引的幾個字段是否經常同時以and方式出現在where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引;

c、如果復合索引中包含的字段經常單獨出現在where子句中,則分解為多個單字段索引;

e、如果既有單字段索引,又有這幾個欄位上的復合索引,一般可以刪除復合索引;

8、頻繁進行資料操作的表,不要建立太多的索引;

9、刪除無用的索引,避免對執行計畫造成負面影響;

以上是一些普遍的建立索引時的判斷依據,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對效能都毫無益處:在表上建立的每個索引都會增加儲存開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。 另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低資料增加刪除時的效能,特別是對頻繁更新的表來說,負面影響更大。

總的來說,小型表肯定不建索引,或者資料庫記錄在億條資料級以上,還是建議使用非關係型資料庫。還有些特殊欄位的資料庫,比如blob,clob欄位肯定也不適合建索引。其實這個問題更感覺偏向於做軟體專案的一種經驗。

1、注意事項:

首先,應當考慮表空間和磁碟空間是否足夠。我們知道索引也是一種資料,在建立索引的時候勢必也會占用大量表空間。因此在對一大表建立索引的時候首先應當考慮的是空間容量問題。

其次,在對建立索引的時候要對錶進行加鎖,因此應當注意操作在業務空閒的時候進行。

2、效能調整方面:

首當其衝的考慮因素便是磁碟i/o。物理上,應當盡量把索引與資料分散到不同的磁碟上(不考慮陣列的情況)。邏輯上,資料表空間與索引表空間分開。這是在建索引時應當遵守的基本準則。

其次,我們知道,在建立索引的時候要對錶進行全表的掃瞄工作,因此,應當考慮調大初始化引數db_file_multiblock_read_count的值。一般設定為32或更大。

再次,建立索引除了要進行全表掃瞄外,同時還要對資料進行大量的排序操作,因此,應當調整排序區的大小

Mysql索引結構與索引原理及hash索引介紹

mysql索引主要包括四種,btree索引 hash索引 full text全文索引 r tree索引,因為作為一名php開發者,並不是專業的dba,在這裡只需要了解第一種開發相關的btree索引。索引的本質 mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料和排序的資料結...

mysql索引怎麼用 mysql怎麼使用索引?

在排序操作中如果能使用到索引來排序,那麼可以極大的提高排序的速度,要使用索引來排序需要滿足以下兩點即可。1 order by子句後的列順序要與組合索引的列順序一致,且所有排序列的排序方向 正序 倒序 需一致 2 所查詢的字段值需要包含在索引列中,及滿足覆蓋索引。通過例子來具體分析 在user tes...

mysql索引hash索引和b tree索引的區別

mysql下增加索引的方式 修改表結構 alter mytable add index indexname on username length 建立表結構 create table mytable id int not null,username varchar 16 not null,index...