索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。
mysql好比跑車,而沒有設計和使用索引的mysql就想乙個人力三輪車,沒有索引的表
資料量在幾十萬以後,基本慢到不可用。
索引是一種特殊檔案,(資料庫上的索引是表空間的乙個組成部分)包含對資料表裡所有記錄的
引用指標。好比一本書前面的目錄,能加快資料庫的查詢速度,沒有索引從頭開始搜尋,有索引
資料庫會直接在索引裡找到符合條件的選項,直接在索引中定位所需要的資料。
建立唯一性索引,保證資料庫表中每一行資料的唯一性
大大加快資料的檢索速度,這也是建立索引的最主要的原因
加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。
在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。
通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能。
若在實際中,需要將多個列設定索引時,可以採用多列索引
如:某個表(假設表名為student),存在多個字段(studentno, studentname, ***,
address, phone, birthdate),其中需要對studentno,studentname欄位進行查詢
對***字段進行分組,對birthdate欄位進行排序,
此時可以建立多列索引
index index_name (studentno, studentname, ***, birthdate);
#index_name為索引名在上面的語句中只建立了乙個索引,但是對4個字段都賦予了索引的功能。
建立多列索引,需要遵循btree型別,即第一列使用時,才啟用索引。
在上面的建立語句中,只有mysql語句在使用到studentno欄位時,索引才會被啟用,如:
select * from student where studentno = 1000;
#使用到了studentno欄位,索引被啟用。可以使用explain檢測索引是否被啟用,如:
explain select * from student where studentno = 1000;
table:顯示這一行的資料是關於哪張表的
type:這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const、eq_reg、ref、range、index和all
type顯示的是訪問型別,是較為重要的乙個指標,結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
一般來說,得保證查詢至少達到range級別,最好能達到ref。
possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個合適的語句
key: 實際使用的索引。如果為null,則沒有使用索引。很少的情況下,mysql會選擇優化不足的索引。這種情況下,可以在select語句中使用use index(indexname)來強制使用乙個索引或者用ignore index(indexname)來強制mysql忽略索引
key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是乙個常數
rows:mysql認為必須檢查的用來返回請求資料的行數
extra:關於mysql如何解析查詢的額外資訊。將在表4.3中討論,但這裡可以看到的壞的例子是using temporary和using filesort,意思mysql根本不能使用索引,結果是檢索會很慢
5、選擇唯一性索引
唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表中學號是具有唯一性的字段。為該字段建立唯一性索引可以很快的確定某個學生的資訊。如果使用姓名的話,可能存在同名現象,從而降低查詢速度。
6、盡量使用資料量少的索引
如果索引的值很長,那麼查詢的速度會受到影響。例如,對乙個char(100)型別的字段進行全文檢索需要的時間肯定要比對char(10)型別的字段需要的時間要多。
7、盡量使用字首來索引
如果索引欄位的值很長,最好使用值的字首來索引。例如,text和blog型別的字段,進行全文檢索會很浪費時間。如果只檢索欄位的前面的若干個字元,這樣可以提高檢索速度。
8、刪除不再使用或者很少使用的索引
表中的資料被大量更新,或者資料的使用方式被改變後,原有的一些索引可能不再需要。資料庫管理員應當定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響。
MySql資料庫索引介紹
資料庫索引對我們來說是透明的,因為資料庫表建立索引前後,sql語句都可以正常執行,索引的運用只是資料庫引擎工作時候的優化手段。但是,這並不是說資料庫索引僅僅是資料庫設計開發人員和運維人員的事情,對於乙個測試人員,如果對資料庫中已有的索引有所了解,可以對測試過程中發現的涉及資料庫操作的問題進行深入分析...
mysql資料庫索引的介紹
索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...