最近在做的模組資料量較大,且業務需求全部是查詢,所以嘗試通過新增索引來提公升查詢速度。既然學了就記下吧。
索引可以在很大程度上提公升資料的檢索速度。索引實際上也是一張表,這個表裡會儲存索引字段,並指向實體記錄。mysql只對以下操作符才使用索引:,>=,between,in,以及某些時候的like(不以萬用字元%或_開頭的情形)。而理論上每張表裡面最多可建立16個索引,不過除非是資料量真的很多,否則過多的使用索引也不是最優的選擇。因為使用索引會降低表更新的速度,在我們更新表資料的時候,我們同時還要維護索引資訊,這也會花費一定的時間。另外,索引也會占用物理空間。
mysql的索引型別
1.普通索引,沒有限制。
2.唯一索引(unique),與普通索引不同的是索引列的值必須唯一。
3.主鍵索引,索引列不能為null
4.組合索引,對多列建立索引,遵循最左字首,比如說我對a,b,c三列建立了乙個組合索引,這是會建立3組組合索引,分別為
aa,b
a,b,c
這時我們如果根據a,b查詢則會使用到我們建立的索引,但是根據a,c|b,c查就不會使用索引,因為沒有組合a,c索引,同理,根據c來查也不會用到索引。
5.全文索引(fulltext),對於大容量的資料表,盡量不使用全文索引,不僅耗時還耗磁碟空間。
索引使用注意事項
1、一般資料庫的主鍵欄位會預設被設定為唯一索引。
2、經常被作為搜尋條件的列可以適當新增索引。
3、查詢只使用乙個索引,如果where條件中已經使用了索引,那麼where後面跟的order by不會使用索引。
4、不要在索引做運算,否則會導致索引失效。
5、索引只對以下操作符有效:,>=,between,in,不以萬用字元%或_開頭的like
建立索引
create (不指定/unique/fulltext) index index_name on table(column(length));
例如:為名稱為public_cloud_bill的表中product_detail欄位新增單一索引
create index index_product_detail on public_cloud_bill(product_detail(50));
例如:為名稱為public_cloud_bill的表中bill_cycle、cloud_id、comment1欄位新增復合索引
create index index_billcyle_cloudid_comment1 on public_cloud_bill(bill_cycle,cloud_id,comment1);
刪除索引
drop index index_name on table_name;
例如:刪除名稱為public_cloud_bill的表中名稱為index_product_detail的單一索引
drop index index_product_detail on public_cloud_bill;
檢視表中所有索引
經過大半天的研究學習,我覺得在使用索引的時候,需要注意的是,如果用到復合索引,那麼一定要嚴格遵循最左字首原則,否則我們建的索引可能並不會生效。我是根據我sql的查詢條件順序,建的符合索引,有了索引之後感覺速度會有提公升,因為我現在資料量較小,差不多4000條資料,我測試了一下,加索引之後,速度提公升大約200毫秒吧,後期資料量大的時候會更加明顯。
~又是因為一點小收穫竊喜的一天 (☄⊙ω⊙)☄
mysql 單列索引與聯合索引的使用
col1,col2,col3 分別加索引i1,i2,i3 select from twhere col1 v 用了索引 i1 select from twhere col1 v and col2 v and col3 v 還是只用了索引 i1 select from twhere col2 v an...
mysql強制使用索引與不使用索引
oracle可以強制使用索引來優化那些因為種種原因沒走索引的sql mysql支援嗎?答案是肯定的 mysql強制索引和禁止某個索引 1.mysql強制使用索引 force index 索引名或者主鍵pri 例如 select from table force index pri limit 2 強...
MySQL使用索引與不使用索引比較
首先,我們通過下面的方式生成1百萬條資料。在不建立索引情況下,通過下面的語句查詢age 20的人數 select count 1 from t user where age 20 耗時 1.2s 通過下面的語句檢視執行計畫 explain select count 1 from t user whe...