mysql如何適當的新增索引

2021-08-20 07:39:41 字數 2857 閱讀 9947

這裡先簡單介紹一下索引:

新增索引是為了提高資料庫查詢效能,索引是最物美價廉的東西了,不用加記憶體,不用改程式,不用調sql,只要執行個正確的create index ,查詢的速度就可能提高百倍千倍,這可是有**力的,可是天下沒有沒費的午餐,查詢的速度的提高是以犧牲insert update delete的速度為代價的。而且索引大小一般是資料的三分之一  ,再加上索引要載入進記憶體的,如果全部欄位都加索引會以犧牲記憶體為代價的,所以才要設當的新增索引。

這裡簡單介紹一下mysql中常用索引:

在新增索引之前最好先檢視一下該表中已存在哪些索引:show index from 表名;

1、主鍵索引

注意: 主鍵索引一張表中只能有乙個,但是可以新增多個索引 比如:唯一索引、普通索引、全文索引。

主鍵索引:一般在建表的時候就新增了 比如:id 一般是主鍵索引加自動遞增。

建表後新增主鍵索引 :alter table table_name add primary key (column name);

主鍵索引的特點:不能為空且唯一。

2、普通索引

建立普通索引: alter table table_name add index 索引名(column1,column2);

3、唯一索引

建立唯一索引:alter table `table_name` add unique (`column`);

唯一索引與主鍵索引的區別:

唯一索引:可以有多個null 但資料內容不能重複

主鍵索引:不能為null,且內容只能唯一。

兩個區別就在於主鍵索引不能為null 唯一索引可以有多個null 其餘都一樣。

4、全文索引

全文索引只有myisam有效(mysql5.6之後innodb也支援了全文索引)[5.7不支援myisam]

全文索引主要針對文字檔案,比如文章、標題。

在建立表時建立全文索引:

create table `article` (

`id` int(10) unsigned not null auto_increment,

`title` varchar(200) default null,

`        content` text,

primary key (`id`),

fulltext key `title` (`title`,`content`)

) engine=myisam(5.6之後innodb也支援全文索引 、5.7不支援myisam引擎) default charset=utf8;

在現有表中建立全文索引:

alter table article add fulltext index fulltext_article(title,content);

建立完全文索引之後使用也有要注意的地方:

眾所周知在資料庫中進行模糊查詢是使用like關鍵字進行查詢的,例如:

select * from article where content like 

『%查詢字串%』;

那麼,我們在使用全文索引也這樣使用嗎?當然不是,我們必須使用特有的語法才能使用全文索引進行查詢,例如,我們想要在article表的title和content列中全文檢索指定的查詢字串,我們可以如下編寫sql語句:

select * from article where match(title,content) against (

『查詢字串』);

強烈注意:

mysql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索

。如果需要

對包含中文在內的文字資料進行全文檢索,我們需要採用sphinx(斯芬克斯)/coreseek技術來處理中文

。注:目前,使用mysql自帶的全文索引時,

如果查詢字串的長度過短將無法得到期望的搜尋結果。mysql全文索引所能找到的詞預設最小長度為4個字元

。另外,如果查詢的字串包含停止詞,那麼該停止詞將會被忽略。

如果可能,請盡量先建立表並插入所有資料後再建立全文索引,而不要在建立表時就直接建立全文索引,因為前者比後者的全文索引效率要高。

刪除索引sql語句:alter table table_name drop index 索引名;

1、 頻繁查詢的字段,應該建立索引。

2、更新非常頻繁的字段,不應該建立索引。

3、唯一性太差的字段,比如 gender欄位,就不應該建立索引。

4、不會出現在where條件之後的字段,不應該建立索引。

滿足一下條件,應該建立索引:

1、頻繁要查詢的字段,經常出現在where條件後面的字段,應該建立索引。

2、更新不頻繁的字段,可以建立索引。

索引使用的注意事項

1.對於建立的多列索引,只要查詢條件使用了最左邊的列,索引一般就會被使用。

比如我們對title,content 新增了復合索引

select * from table_name where title = 'test';會用到索引

select * from table_name where content = 'test';不會用到索引

2.對於使用

like

的查詢,查詢如果是『%a

』不會使用到索引 ,而 like 'a%'就會用到索引。最前面不能使用%和_這樣的變化值

3.如果條件中有

or,即使其中有條件帶索引也不會使用。

4.如果列型別是字串,那一定要在條件中將資料使用引號引用起來。

檢視索引的使用情況:show status like『handler_read%』;  

handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。

handler_read_rnd_next:這個值越高,說明查詢低效。

mysql 如何加索引 mysql如何新增索引

mysql新增索引的方法 可以通過 create table 語句來新增,如 constraint primary key index 表示建立一般索引。在mysql中可以在建立表 create table 的同時建立索引 也可以在建立表後建立索引,使用create index語句或alter ta...

mysql 新增索引

mysql索引原理 1.新增primary key 主鍵索引 mysql alter table table name add primary key column 2.新增unique 唯一索引 mysql alter table table name add unique column 3.新增...

mysql 新增索引

1.新增primary key 主鍵索引 語法 alter table 表名 add primary key 列名稱 mysql alter table table name add primary key column 2.新增unique 唯一索引 語法 alter table 表名 add u...