mysql學習日記之索引

2021-06-21 15:21:02 字數 1142 閱讀 2805

在mysql資料庫中,資料的查詢是我們經常用到的操作。在查詢的時候,我們經常是根據一些條件進行過濾而不是把所有的記錄都查詢出來,當乙個表中的記錄很多的時候,有時候我們查詢一條記錄可能需要遍歷整張表,這樣效率是非常低下的,建立索引可以有效提高查詢效率。

簡單的分,索引可以分為單列索引和組合索引;單列索引即該索引只包含一列,組合索引則是多列。

mysql的索引型別

1 普通索引

這是一種最基本的索引,沒有限制。

2 唯一索引

它與普通索引的區別就是它必須唯一,不允許有重複的情況出現,但可以允許出現空值,如果是組合索引,則必須保證組合的值唯一。

3 主鍵索引

它是一種特殊的唯一索引,不允許有空值,一般在建立表時就建立了。

4 組合索引

組合索引就是用多個列來建立索引。

以下情況即使建立了索引,索引也不會被引用

1 比如這個列已經建立了索引,但是在查詢的時候用'%sfdjh『;當%用在最開始的時候就不會使用索引,而'asd%『就可以飲用索引。

2 當乙個表中的資料很少時,mysql估計進行全表查詢要比使用索引還要快,在這個時候就不會使用索引。

3 在memory或heap表中不適用「=」就不會引用索引,heap表中只有在「=」的條件下才會使用索引。

4 用or分隔開的條件,如果or前的條件對應的列中有索引,而後面的列中沒有索引,那麼所有被涉及到的索引都不會被用到。

5 如果該列是字串,在where後面條件中的字串常量一定要有引號引起來否則索引不會被使用。

6 在組合索引中,索引的引用遵循「最左原則」,比如在乙個表中有name,age,***這三個字段,並且在這三個欄位上建立了組合索引,那麼一定要首先引用name索引才會生效,比如在select * from user where name='sam' and sge='10' and ***='f'或者select * from user where name='sam' and age = '10' 或者select * from user where name=』sam『這樣的語句中會使用索引,而在select * from user where age=』19『這樣的查詢語句中,則不會使用索引,總之name一定要出現在最左邊索引才會被使用,其實上面的組合索引就相當於分別建立了name,age,***   name,age  nage三個索引。

mysql學習日記之鎖

在當前事務中包含select.lock in share mode時,就是所謂的共享鎖,就是確保某行記錄存在,在該事務獲得共享鎖的同時,其他事務也可以獲得共享鎖。如果在這個時候某個事務開始進行跟新操作,這個事務會等待,如果這個時候有其他事務也進行更新操作,則會造成死鎖,系統會直接乾掉後面的,按照第乙...

後端學習日記 MySQL索引的使用

普通索引 alter table table name add index index name column list 唯一索引 alter table table name add unique column list 主鍵索引 alter table table name add primar...

mysql 索引 二 MySQL學習之索引(二)

高效能的索引策略 isolating the column 孤立列就是說,這一列不能在表達示中或在乙個函式裡面,如 mysql select actor id from actor where actor id 1 5 錯誤 再如 mysql select where to days current...