mysql 主鍵失效 MySQL索引(索引失效)

2021-10-17 16:03:37 字數 1825 閱讀 9851

索引

索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。

myisam儲存引擎,資料檔案、索引檔案、表結構檔案分開儲存

innodb儲存引擎,資料和索引儲存在乙個檔案中

b+tree索引

hash索引

hash索引(只有memory儲存引擎支援),查詢一條記錄的速度非常快

b+tree索引(innodb和myisam支援),更適合排序等操作

適合作索引的資料型別

(1)較小的資料型別,需要更少的空間

(2)簡單的資料型別,整型比字串開銷小

(3)避免使用null,null會導致索引失效

主鍵索引

唯一索引

普通索引

全文索引

組合索引

顯示當前表的所有索引資訊

show index from tablename\g

1.普通索引

create index idx_name on tablename(colname(length))

如果是char或者varchar length可以小於實際的長度,如果是blob和text 必須指定length

alter table tablename add index idx_name(colname)

drop index idx_name on tablename

一張表可以有多個普通索引

2. 唯一索引

列的值必須唯一,允許用null值

如果是組合索引,列的值的組合必須唯一

create union index idx_name on tablename(colname)

alter table table_name add unique idx_name(colname)

一張表可以有多個唯一索引

3.主鍵索引

主鍵的資料型別最好為整型

主鍵索引只能有乙個

主鍵列的值必須唯一並且不能是null

自動增長的列一定是主鍵

主鍵列不一定是自動增長的

alter table tablename add primary key(col_name)

4.全文索引

innodb不支援

alter table tablename add fulltext idx_name(col_name)

索引失效

1.最佳左字首原則

組合索引,不按索引定義時制定的順序 的最左列開始

2.like 『%z』

like模糊查詢時, 以%開頭,導致索引失效

3.範圍之後全失效(>

如果是主鍵或者索引列是整數,索引不會失效

4.遇到null值,索引失效

5.索引列上的顯式或者隱式運算,導致索引失效

6.order by

由於查詢只使用乙個索引,因此,如果where語句使用了索引,order by語句不會使用

7.不在乙個方向的order by導致索引失效

全asc 或 全desc

8.組合索引,中間跳過了某一列,後面的列全失效

9.is null is not null != <> 都會導致索引失效,如果這些用在主鍵列上,仍會使用索引

10.字串型別不加單引號,導致索引失效

不加單引號,會有隱式的型別轉化(索引列上的計算會導致索引失效)

11.用or連線導致索引失效

or條件有未建立索引的列導致索引失效

應當避免select * ,使用覆蓋索引

count(1)或者count(col)代替count(*)

列的可取值較少時,不建議使用索引(性別)

使用char代替varchar

mysql主鍵索引 MySQL索引之主鍵索引

在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...

mysql主鍵是聚集索引麼 主鍵就是聚集索引嗎?

前言 最近在一次面試中,討論了乙個這樣的問題 主鍵和索引有什麼區別?當時我的回答是這樣的 主鍵就是加了唯一性約束的聚集索引。你確定你所說的是對的?面試官反問到。應該是對的。我不加思索地回答道。你回去後研究一下這個問題吧。難道我真的錯了?第一次嘗試 當問題出現時,請用事實支援你的觀點。首先,必須了解一...

mysql索引失效 常見mysql索引失效條件

使用索引的一般語句 1 where條件中有or,除非or的所有欄位都有索引,只要有乙個沒有索引,就不走索引 explain select from jf user ju where ju.user id or ju.superior1 yyy user id是主鍵,superior1是普通索引,結果...