索引好比書的目錄,好比新華字典的拼音、偏旁部首查字,可以幫助人快速查詢到需要的內容,
當資料表記錄達到幾十w級別的時候,索引的作用非常明顯。所以建立索引也是需要消耗資源的。
索引型別有多種,雜湊、btree、全文索引等,其實不管什麼型別,都是為了在特定業務場景下方便快速查詢資料的演算法。所以建立索引以最常用查詢資訊作為建立索引的依據為最佳選擇。
手動建立索引
create index index_tb_
student_name
on tbl_student(stu_name)
使用索引(在where 之後加上索引,提高傳效率)
原理:select * from tbl_student where stu_name=? 索引作為where查詢條件
當以某個字段建立乙個索引的時候,資料庫就會生成乙個索引頁,當我們查詢資料時,oracle會先查索引頁,這樣就能夠很快的查詢到要找的記錄。
注意:
如果表的列很少,不適合建索引。
當執行過多次的insert,delete,update後,會出現索引碎片,影響查詢速度,我們應該對索引進行重組,其方法如下:
drop index index_name;
create index index_name on table(column)
其實,就是刪除掉索引,重新再建立索引。
拓展:
對於建立的多列索引,只要查詢條件使用了最左邊的列,索引一般就會使用。
對於使用like的查詢,查詢如果是 「%aaa」 不會使用到索引,『aaa%』會使用到索引。
下列的表將不會使用索引:
1、如果條件中有or,即使其中有條件帶索引也不會使用。
2、對於多列索引,不是使用的第一部分,則不會使用索引。
3、like查詢是以%開頭
4、如果列型別是字串,那一定要再條件中將資料使用引號引起來,否則不使用索引。(新增是,字串必須「)
5、如果mysql估計使用全表掃瞄比使用索引快,則不使用索引。
//login就是最左邊的列,name就是右邊的列alter table account add index my_index(login,name)
如果表中有復合索引,索引作用在多列上,此時我們注意:對於建立的多列索引,只要查詢條件使用了最左邊的列,索引一般會被使用。
此時:
由於使用的是右側的列,此時索引是不會生效的,如何知道呢?select * from account where name="timchen"
新增explain 此時possible_key的值是為空的。
但是當我們使用左側的列是,explain的值不為空。
常見的索引方法有btree以及hash這兩種方法各有優劣
hash方法:
這種方法是將想要設定索引的一列整體使用hash演算法進行計算,並得到hash值排序在hash陣列上,所以hash索引可以實現一次定位(效率很高)
缺點:1、由於是經過hash值進行比較,所以只能進行等式比較,不可以進行範圍查詢
2、每一次都要進行全表掃瞄
3、由於雜湊值是按照順序排列的,但是雜湊值對映的真正資料在雜湊表中就不一定按照順序排列,所以無法利用hash索引來加速任何排序操作
3、不能用部分索引鍵來搜尋,因為組合索引在計算雜湊值的時候是一起計算的。
4、當雜湊值大量重複且資料量非常大時,其檢索效率並沒有btree索引高的。
btree方法:
btree方法以b+樹為儲存結構實現的。在innodb引擎中和myisam引擎中有很大區別(myisam引擎中索引檔案和資料檔案在儲存中時分開的|非聚集,而innodb引擎則是聚集索引)
btree是按照從左到右的順序來建立搜尋樹的。比如索引是(name,age,***),會先檢查name欄位,如果name欄位相同再去檢查後兩個字段。
所以當傳進來的是後兩個欄位的資料(age,***),因為建立搜尋樹的時候是按照第乙個字段建立的,所以必須根據name欄位才能知道下乙個欄位去**查詢。
所以傳進來的是(name,***)時,首先會根據name指定搜尋方向,但是第二個字段缺失,所以將name欄位正確的都找到後,然後才會去匹配***的資料。
建立索引的規則:
1、利用最左字首:mysql會一直向右查詢直到遇到範圍操作(>,<,like、between)就停止匹配。比如a=1 and b=2 and c>3 and d=6;此時如果建立了(a,b,c,d)索引,那麼後面的d索引是完全沒有用到,當換成了(a,b,d,c)就可以用到。
2、不能過度索引:在修改表內容的時候,索引必須更新或者重構,所以索引過多時,會消耗更多的時間。
3、盡量擴充套件索引而不要新建索引
4、最適合的索引的列是出現在where子句中的列或連線子句中指定的列。
5、不同值較少的列不必要建立索引(性別)。
primary 主鍵。 就是 唯一 且 不能為空。
index 索引,普通的
unique 唯一索引。 不允許有重複。
fulltext 是全文索引,用於在一篇文章中,檢索文字資訊的。
常見資料庫分頁實現方案
隨著資料庫的發展,如今的資料庫可以儲存大量的資料,記憶體也是越來越大,但是無論您的記憶體多大,記憶體總是顯得不夠用,這時就要涉及到分頁,下文中將為大家帶來詳細的資料庫分頁操作 1.oracle select from select row rownum rownum from query sql r...
常見資料庫分頁實現方案
隨著資料庫的發展,如今的資料庫可以儲存大量的資料,記憶體也是越來越大,但是無論您的記憶體多大,記憶體總是顯得不夠用,這時就要涉及到分頁,下文中將為大家帶來詳細的資料庫分頁操作 1.oracle sql select from select row rownum rownum from query s...
常見資料庫的分頁實現方案
隨著資料庫的發展,如今的資料庫可以儲存大量的資料,記憶體也是越來越大,但是無論您的記憶體多大,記憶體總是顯得不夠用,這時就要涉及到分頁,下文中將為大家帶來詳細的資料庫分頁操作。1.oracle 1 2 select from selectrow rownum rownum from query sq...