Mysql 中建立索引和索引的使用問題

2022-02-11 08:13:23 字數 2184 閱讀 4462

在資料庫中合理的使用索引是提公升mysql資料庫的一種高效和快捷的方式,但是在索引的使用上在我的使用中發現有很多坑,因為自己之前沒有認識到,所以來總結一下

索引是一種特殊的檔案,其中包含著對資料表中的所有記錄的引用指標

欄位中儲存的內容重複性不能過高,比如性別,顏色等這些可區分性很低的字段

欄位會經常性的用作查詢語句。 因為建立索引也是需要儲存的空間的,而且建立了索引會造成insert等語句的速度變慢

字段更新的斌率不高的字段適合新增索引。資料的更新會帶來索引的更新。

普通索引 :key。唯一的作用就是加快查詢的速度

主鍵索引 :primary key。字段具備唯一性 一張資料表中只有乙個

唯一索引 :unique key

聯合索引 :key(a,b,c)

全文索引 :fulltext(column1, column2)mysql5.6以前的innodb表不支援。使用:where match(column) against('search_content')

索引欄位上使用where day(column)='' 或where column*2=100這種運算,索引不會被使用到

在索引的字段上 使用not in,<>,!=這些運算子的時候,執行explain會使用到索引,但是這些操作是不被推崇的,因為就算是用到了索引速度也不會很快.而且在mysql的5.6版本以前這種方式就算執行explain操作也是是用不到索引的

在索引欄位上使用likeregexp操作的時候,%的萬用字元不能放在要查詢的字串的左側(可以想象使用索引的時候就是在查字典,比如想要找到'mysql'這個單詞,需要從m開始,然後是y,所以查詢的順序就是從左往右的)

關於聯合索引的一些注意事項:

如果給一張表新增的一組聯合索引如下:key(name,email,age),mysql在新增聯合索引的時候以『最左字首』的形式進行索引的新增,那麼在進行查詢select *的時候[name] [name,email] [name,email,age]這三組查詢條件都是可以使用到這個組合索引的,但是這並不是重點

如果現在使用explain select * from table where age=11會發現索引並沒有被使用到。 可是執行explain select name,email from table where age=11.會發現這個索引被使用到了。這種方式叫做索引覆蓋,在執行explain語句的時候,會發現extra一欄中衛'using index',如果儲存引擎使用的是innodb,二級索引也儲存了primary key的值,如果用過索引去訪問primary key的值,也可以訪問到

還有就是 關於新增聯合索引還是單列索引的問題。如果欄位都被新增成單列的索引,相比於聯合索引的話,會增加資料庫的io的等待

索引的確可以加快mysql在查詢時候的速度。但是在資料進行新增及更新等操作的時候,也需要對應的維護索引關係(但是也有配置可以在資料:delay_key_write,不深入展開)

在使用多個條件進行資料的查詢的時候,有網上的很多說法都是mysql中單次sql的查詢只能使用到乙個索引(這個是錯誤的!!) 一條sql語句,針對一張表的查詢,多個條件之間使用and拼接的話,索引在mysql內部會被執行 union的操作,索引是可以使用到的!但是!如果條件之間使用or進行條件的拼接的話,那麼如果想要該語句的索引有效就必須保證每個被or連線的條件都可以使用到索引。

比如果我現在想要給 使用者表的使用者家庭住址字段新增索引,該欄位:address的型別為varchar(255) ,對整個字段建立索引的話肯定是不合理的,這個時候需要為該字段的前n個值建立索引。可以使用 

select count(distinct substring(字段,1,結束位置)) from 表

對比一下表中的總資料看一下該n值得選擇性,用來確定索引的長度

mysql 建立索引和刪除索引

索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...

mysql 建立索引和刪除索引

索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...

mysql 建立索引和刪除索引

索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...