一、什麼是索引!!! 學乙個技術的時候,首先要知道他是什麼,他的作用是什麼,他能幹什麼
索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b-樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到目標記錄所在的位置。如果表有1000個記錄,通過索引查詢記錄至少要比順序掃瞄記錄快100倍。
索引的型別
普通索引 這是最基本的索引,它沒有任何限制
alter table `table_name` add index index_name ( `column` )
主鍵索引 它是一種特殊的唯一索引,不允許有空值。一般是建表的時候同時建立主鍵索引
alter table `table_name` add primary key ( `column` )
唯一索引 它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一
alter table `table_name` add unique (
`column` )
組合索引 為了形象地對比單列索引和組合索引,為表新增多個字段
alter table `table_name` add index index_name ( `column1`, `column2`, `column3` )
全文索引 一種特殊的索引,它會把某個資料表的某個資料列出現過的所有單詞生成乙份清單
alter table `table_name` add fulltext ( `column`)
什麼情況下適合建立索引
1)快速查詢符合where條件的記錄
2) 快速確定候選集。若where條件使用了多個索引字段,則mysql會優先使用能使候選記錄集規模最小的那個索引,以便盡快淘汰不符合條件的記錄。
3) 如果表中存在幾個字段構成的聯合索引,則查詢記錄時,這個聯合索引的最左字首匹配欄位也會被自動作為索引來加速查詢。
例如,若為某錶建立了3個字段(c1, c2, c3)構成的聯合索引,則(c1), (c1, c2), (c1, c2, c3)均會作為索引,(c2, c3)就不會被作為索引,而(c1, c3)其實只利用到c1索引。
4) 多表做join操作時會使用索引(如果參與join的字段在這些表中均建立了索引的話)
5) 若某字段已建立索引,求該字段的min()或max()時,mysql會使用索引
6) 對建立了索引的字段做sort或group操作時,mysql會使用索引
索引的不足之處
上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:
1.雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。
2.建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會膨脹很快。
索引只是提高效率的乙個因素,如果你的mysql有大資料量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。
使用索引時,有以下一些技巧和注意事項:
1.索引不會包含有null值的列
只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。
2.使用短索引
對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。
3.索引列排序
mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。
4.like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
5.不要在列上進行運算
mysql索引的使用
索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。組合索引,即乙個索包含多個列。1 普通索引 這是最基本的索引,它沒有任何限制。它有以下幾種建立方式 建立索引 create index indexname on tablename column ...
mysql索引的使用
最近在學mysql,由於對索引沒怎麼接觸過,故做下筆記已被後面參考.假設我們有個公司表沒有建立索引,公司有個編號,當我們要查詢編號為13的公司 其中表中存在很多記錄關於同乙個公司的 由於公司編號沒有排序的,要查詢該公司資訊必須掃瞄全表.如果我們建立了索引,編號會排好序,當我們查詢13的公司,資料庫快...
mysql的索引使用
表中索引欄位的修改會導致索引列表的修改,這個會帶來一定的效率損耗,一張表不能建立過多索引。復合索引和單索引速度都很快,但是使用索引一定要根據where後面的條件一致。包括欄位和順序。百萬級別的資料建索引在30秒到1分鐘之間,刪除索引在1秒到幾秒之間。任何函式操作本身就要花費0.033秒左右的時間。m...