mysql 索引作用范圍


索引是什么? 
模式(schema)中的一個數據庫對象。 
在數據庫中用來加速對表的查詢。 
通過使用快速訪問方法確定定位數據,減少磁盤的I/O 
與表獨立存放,但不能獨立存在,必須屬於某個表 
由數據庫自動維護,表被刪除時,該表上的索引自動被刪除 
索引的作用類似於書的目錄,幾乎沒有一本書沒有目錄,因此幾乎沒有一張表沒有索引。

自動:當在表上定義一個PRIMARY KEY 或者 UNIQUE 約束時,數據庫自動創建一個對應的索引。 
手動:用戶可以創建索引以加速查詢。

創建一個索引: 
手動創建一個索引:

CREATE INDEX index_tb_student_name ON tbl_student(stu_name)

上面索引的名字可以自己命名

使用索引(在where 之后加上索引,提高傳效率)

select * from tbl_student where stu_name=?

總之: 
索引在經常查詢的字段上面建立索引。 
利用index對查詢進行優化(index可以避免對表的一個全面掃描)

原理: 
當以某個字段建立一個索引的時候,數據庫就會生成一個索引頁,當我們查詢數據時,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估計使用全表掃描比使用索引快,則不使用索引。

alter table account add index my_index(login,name) 

//login就是最左邊的列,name就是右邊的列

如果表中有復合索引,索引作用在多列上,此時我們注意:對於創建的多列索引,只要查詢條件使用了最左邊的列,索引一般會被使用。

此時:

select * from account where name="timchen"

由於使用的是右側的列,此時索引是不會生效的,如何知道呢? 
添加explain 此時possible_key的值是為空的。

但是當我們使用左側的列是,explain的值不為空。

 

轉載 

timchen525的專欄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM