索引設計的原則(場景):
1:最適合索引的列是出現在where條件語句的列或者是連線子句指定的列,而不應該是select關鍵字後面的列;
2:使用唯一索引,考慮應該是:索引的列的基數越大,索引的效果越好,如果索引建在性別列,就沒有意義了,因為無論搜尋哪個值,都會得到大約一半的行
3:使用短索引,如果對字串進行索引,應該制定乙個字首長度,只要有可能,就應該這樣做。例如有乙個char(100)列,如果在前10個或20個字元內,多數值是唯一的,那麼就不需要對整個列進行索引。這是因為使用前10個或20個字元進行索引可以節省大量索引空間
4:不要過度使用索引,每個額外的索引都要占用額外的磁碟空間,並降低寫操作的效能
索引的分類:
memory儲存引擎的表可以選擇使用btree索引或者hash索引,兩種不同型別的索引有其不同的使用範圍
hash索引優點:
hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b-tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b-tree 索引。
hash索引缺點: 那麼不精確查詢呢,也很明顯,因為hash演算法是基於等值計算的,所以對於「like」等範圍查詢hash索引無效,不支援;
索引相關常用的sql語句:
create index indexname on tablename(column_name):建立索引
drop index indexname on tablename 刪除索引
show index from tablename:查詢表中的索引的屬性,屬性欄位有:· non_unique 如果索引不能包括重複詞,則為0。如果可以,則為1。
key_name 索引的名稱。
seq_in_index 索引中的列序列號,從1開始。
column_name 列名稱
cardinality索引中唯一值的數目的估計值。通過執行analyze table或myisamchk -a可以更新。基數根據被儲存為整數的統計資料來計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,mysql使用該索引的機 會就越大。
packed指示關鍵字如何被壓縮。如果沒有被壓縮,則為nullnull如果列含有null,則含有yes。如果沒有,則該列含有noindex_type用過的索引方法(btree, fulltext, hash, rtree)。
MYSQL 索引的介紹及使用
mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質,索引是資料結構。對於索引,我們理解成目錄都可以,就像一本書的目錄,當我們需要查詢書中某個資料時,如果對書本不了解,我們直接找肯定會很費勁,但是如果我們先找目錄,查詢的速度就會提...
MySQL索引的介紹與應用
mysql中索引是儲存引擎層面用於快速查詢找到記錄的一種資料結構,索引對效能的影響非常重要,特別是表中資料量很大的時候,正確的索引會極大的提成查詢效率。簡單理解索引,就相當於一本磚頭厚書的目錄部分,通過目錄可以快速查詢到想要找的內容具體所在的頁碼 1 新增primary key 主鍵索引 mysql...
mysql的索引介紹
什麼是索引?簡單的來說,索引就是相當乙個目錄,舉個栗子,我現在想在一張學生表中查詢叫李明的學生,沒有索引的話,mysql執行全盤掃瞄 理解為for迴圈 並且掃瞄的是資料庫中的所有字段。如果我在name這個欄位上建立乙個索引,那麼只需要去查詢name這一列,然後在將這一列的值取出來就好。索引的優缺點 ...