mysql索引類型

索引類型:搜索引擎

  1. 普通索引
  2. 惟一索引
  3. 主鍵索引
  4. 組合索引
  5. 全文索引

1.普通索引spa

最基本的索引,沒有任何限制code

建立方式:blog

CREATE INDEX `CODE_INDEX` ON `vanora_test` (`code`) USING BTREE;

  

CREATE TABLE `vanora_test` ( `code` varchar(20) NOT NULL, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, INDEX `CODE_INDEX` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk

刪除索引:排序

ALTER TABLE `vanora_test` DROP INDEX `CODE_INDEX` ;

 

2.惟一索引索引

相似普通索引,不一樣是:索引列必須惟一,單容許空值。若是是組合索引,則列值組合必須惟一
建立方式:ci

CREATE UNIQUE INDEX `CODE_INDEX` ON vanora_test(`code`);

  

CREATE TABLE vanora_test_INDEX ( `code` varchar(20) NOT NULL, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, UNIQUE INDEX `U_INDEX` (CODE) ) ENGINE=InnoDB DEFAULT CHARSET=gbk

刪除索引it

ALTER TABLE `vanora_test` DROP INDEX CODE_INDEX

 

3.主鍵索引table

特殊的惟一索引,一個表只能有一個主鍵,不容許有空值,通常在新建表的時候會同時建立主鍵索引class

建立方式:

 

ALTER TABLE VANORA_TEST ADD PRIMARY KEY (CODE);

 

CREATE TABLE vanora_test_INDEX ( `code` varchar(20) NOT NULL, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, PRIMARY KEY(`CODE`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk

 

刪除方式

ALTER TABLE vanora_test DROP PRIMARY KEY;

 

id是自增加的主鍵索引,刪除時注意:

CREATE TABLE `vanora_test` ( `code` varchar(20) NOT NULL, `id` int(10) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL, `city_code` int(10) DEFAULT NULL, `Phone` varchar(15) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=gbk

 

alter table vanora_test DROP PRIMARY KEY;(錯誤)
alter table vanora_test DROP id;(直接刪除字段)


刪除索引:
alter table vanora_test modify id int(10) NOT NULL;(去掉自增)
alter table vanora_test drop primary key;


4.組合索引

ALTER TABLE vanora_test ADD INDEX CODE_ID_INDEX (CODE,id);

使用組合索引遵循最左前綴集合,比方索引是key index(a,b,c),這種索引支持a|a,b|a,b,c 三種組合查找,其餘狀況,組合索引沒有用處
複合索引的結構與電話簿相似,人名由姓和名構成,電話簿首先按姓氏對進行排序,而後按名字對有相同姓氏的人進行排序。若是您知 道姓,電話簿將很是有用;若是您知道姓和名,電話簿則更爲有用,但若是您只知道名不姓,電話簿將沒有用處。

5.全文索引

主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是一個搜索引擎,而不是簡單的where語句的參數匹配。fulltext索引配合match against操做使用,而不是通常的where語句加like。它能夠在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上能夠建立全文索引。值得一提的是,在數據量較大時候,現將數據放入一個沒有全局索引的表中,而後再用CREATE index建立fulltext索引,要比先爲一張表創建fulltext而後再將數據寫入的速度快不少。

建立

CREATE TABLE `full_table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), FULLTEXT (content) );
ALTER TABLE full_table ADD FULLTEXT index_content(content);

 

缺點

1.提升了速度,可是下降了更細表的速度,更新表時,不只要保存數據,還要保存一下索引文件
2.創建索引會佔用磁盤空間

注意

1.索引列不包含有null的值
有null值的列不會被包含在索引中,組合索引只要有一列是null,組合索引無效


2.使用短索引
提升查詢速度,節省磁盤空間


3.索引列排序
查詢只使用一個索引,where使用了索引,order by中再也不使用索引


4.like
like 'aa%' 使用了索引
like '%aa' 沒有使用索引


5.在索引列進行運算,索引失效
SELECT * FROM order WHERE DATE_FORMAT(Create_Time,'%Y%m%d')>='20190301' LIMIT 10;

6.可使用索引的:<,<=,=,>,>=,BETWEEN,IN可使用索引的:<>,not in ,!=

相關文章
相關標籤/搜索