mysql索引的使用(一)

2021-08-22 18:17:47 字數 3316 閱讀 1598

一、索引的命名規則

1.加索引的字段,需要在where條件中;

2.資料量少的字段不需要加索引;

3. 更新頻率高的字段不適合加索引;

4.如果where條件中有or,加索引的話不起任何作用;

5.對於聯合索引而言,符合最左原則;

二、什麼是聯合索引

聯合索引又叫復合索引。對於復合索引:mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c). 可以支援a|a,b|a,b,c3種組合進行查詢,但不支援 b,c進行查詢 .當最左側欄位是常量引用時,索引就十分有效。

兩個或更多個列上的索引被稱作復合索引。

利用索引中的附加列,您可以縮小搜尋的範圍,但使用乙個具有兩列的索引 不同於使用兩個單獨的索引。復合索引的結構與**簿類似,人名由姓和名構成,**簿首先按姓氏對進行排序,然後按名字對有相同姓氏的人進行排序。如果您知 道姓,**簿將非常有用;如果您知道姓和名,**簿則更為有用,但如果您只知道名不姓,**簿將沒有用處。

所以說建立復合索引時,應該仔細考慮列的順序。對索引中的所有列執行搜尋或僅對前幾列執行搜尋時,復合索引非常有用;僅對後面的任意列執行搜尋時,復合索引則沒有用處。

三、聯合索引的增刪改查

1.建立乙個聯合索引

可以使用create index,alter table為表增加索引;create index可以為表增加唯一索引和普通索引;alter table 可以為表增加普通索引,唯一索引和主鍵索引;語法如下:

alter table table_name add index index_name (column_list1,column_list2)

alter table table_name add unique (column_list1,column_list2)

alter table table_name add primary key (column_list1,column_list2)

create index index_name on table_name (column_list1,column_list2)

create unique index index_name on table_name (column_list1,column_list2)

2.刪除乙個聯合索引

可以使用drop index 或者 alter table 來刪除索引;語法可以按照如下方式去寫;兩種方式一致;

drop index index_name on talbe_name 

alter table table_name drop index index_name 

3.查詢表中存在的索引

mysql> show index from tblname;

mysql> show keys from tblname;

4.修改索引,不能直接修改,只能通過間接 先刪除在新增的方式去操作;

四、什麼情況下使用索引

表的主關鍵字

自動建立唯一索引

如zl_yhjbqk(使用者基本情況)中的hbs_bh(戶標識編號)

表的字段唯一約束

oracle利用索引來保證資料的完整性

如lc_hj(流程環節)中的lc_bh+hj_sx(流程編號+環節順序)

直接條件查詢的字段

在sql中用於條件約束的字段

如zl_yhjbqk(使用者基本情況)中的qc_bh(區冊編號)

select * from zl_yhjbqk where qc_bh=』<????甼曀???>7001』

查詢中與其它表關聯的字段

字段常常建立了外來鍵關係

如zl_ydcf(用電成份)中的jldb_bh(計量點表編號)

select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=』540100214511』

查詢中排序的字段

排序的字段如果通過索引去訪問那將大大提高排序速度

select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)

select * from zl_yhjbqk where qc_bh=』7001』 order by cb_sx(建立qc_bh+cb_sx索引,注:只是乙個索引,其中包括qc_bh和cb_sx欄位)

查詢中統計或分組統計的字段

select max(hbs_bh) from zl_yhjbqk

select qc_bh,count(*) from zl_yhjbqk group by qc_bh

五、什麼情況下應不建或少建索引

表記錄太少

如果乙個表只有5條記錄,採用索引去訪問記錄的話,那首先需訪問索引表,再通過索引表訪問資料表,一般索引表與資料表不在同乙個資料塊,這種情況下oracle至少要往返讀取資料塊兩次。而不用索引的情況下oracle會將所有的資料一次讀出,處理速度顯然會比用索引快。

如表zl_sybm(使用部門)一般只有幾條記錄,除了主關鍵字外對任何乙個欄位建索引都不會產生效能優化,實際上如果對這個表進行了統計分析後oracle也不會用你建的索引,而是自動執行全表訪問。如:

select * from zl_sybm where sydw_bh=』5401』(對sydw_bh建立索引不會產生效能優化)

經常插入、刪除、修改的表

對一些經常處理的業務表應在查詢允許的情況下儘量減少索引,如zl_yhbm,gc_dfss,gc_dfys,gc_fpdy等業務表。

資料重複且分布平均的表字段

假如乙個表有10萬行記錄,有乙個欄位a只有t和f兩種值,且每個值的分布概率大約為50%,那麼對這種表a欄位建索引一般不會提高資料庫的查詢速度。

經常和主欄位一塊查詢但主字段索引值比較多的表字段

如gc_dfss(電費實收)表經常按收費序號、戶標識編號、抄表日期、電費發生年月、操作 標誌來具體查詢某一筆收款的情況,如果將所有的字段都建在乙個索引裡那將會增加資料的修改、插入、刪除時間,從實際上分析一筆收款如果按收費序號索引就已 經將記錄減少到只有幾條,如果再按後面的幾個字段索引查詢將對效能不產生太大的影響。

mysql索引使用 一

來公司幾個月了,成長很快。無論是業務還是技術,自己能感覺到熟悉的很快,也聽到了領導的誇獎。謝謝啊!工作10年了,感謝這10年奠定的基礎。能讓我很快的熟悉專案,很快的協助同事完成任務。最近幾年也做過專案管理的一些事,所以我也敢說敢問。勇敢的跟同事去要任務,因為其他服務端開發的同事都是兼職,所以我必須感...

MySql如何使用索引 一

我們都知道在 mysql 中使用索引可以提高查詢效率,但有時候真正執行sql查詢的時候卻沒有按照我們的預想使用索引,而是全表掃瞄,導致有慢sql影響了整個 的效率,甚至導致 崩潰,所以我們需要了解mysql是如何選擇使用索引的,以便建立合適的索引 本文基於mysql5.7,innodb引擎 假設有一...

MySQL索引優化 使用 一

索引設計的原則 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護者滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引 優勢 1類似於書籍的目錄索引,提高資料檢索效率,降低...