MYSQL索引的做用和建立

索引是查詢優化最主要的方式;sql

查詢方式:優化

一種是:全表掃描;spa

一種是:利用數據表上創建的因此進行掃描。指針

如:對錶中name字段創建索引;則按照表中name字段進行索引排序,併爲其創建指向數據表中記錄所在位置的「指針」。code

Mysql索引根據用途分爲:blog

1.普通索引:列值能夠取空值或重複值。建立使用關鍵字INDEX或KEY;排序

2.惟一索引:列值不能重複;即索引列值必須是惟一的,但能夠是空值;建立使用關鍵字UNIQUE;索引

3.主鍵索引:主鍵索引是系統自動建立的主鍵索引,而且是惟一的。與惟一索引區別是;列值不能爲空ip

4.聚簇索引:就是數據存儲的物理存儲順序,非聚簇索引就是索引順序與數據的物理順序無關。一個表只能有一個聚簇索引。目前只有InoDB和solidDB支持。rem

5.全文索引:只能建立在varchar或text的列上;創建全文索引可以在全文索引的列上進行查找。

(1)單列索引:就是一個索引只包含表中的一個列;比建立一個學號ID的索引;以name再建立一個姓名的單列索引。即每一個索引包含一個列。

(2)組合索引(複合索引或多列索引):就是表中的兩個列或多個列來建立成一個索引;好比;以用戶ID、用戶名Name、用戶年齡Age來建立的索引就是聯合索引。

排序規則是;左前綴原則:即先按照用戶ID,排序後;當第一列值相同的狀況下;則按照用戶名Name第二列判刑;依次類推。

 

CREATE TABLE `ik_admin` (
`userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
`username` varchar(50) NOT NULL,
`password` varchar(256) NOT NULL,
`role_id` smallint(5) NOT NULL,
`last_ip` varchar(20) NOT NULL,
`last_time` int(10) NOT NULL DEFAULT '0',
`email` varchar(64) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`userid`), #表示主鍵默認是索引;並且不容許爲空
UNIQUE KEY `user_name` (`username`) #惟一索引;改列不能重複;但能夠爲空
) ENGINE=MyISAM AUTO_INCREMENT=1002 DEFAULT CHARSET=utf8 COMMENT='管理員';

6.建立表索引語句:

 

 

 1 drop TABLE if exists my_test;
 2 create table my_test(
 3     id int(11) not null unique auto_increment,
 4     name varchar(10) not null default 0,
 5   age int(11) not null default 0
 6 ) engine=innodb charset=utf8;
 7 
 8 #查看錶my_test的所有索引
 9 show index from my_test;
10 
11 #建立索引
12 create index index_n on my_test(name); #爲表my_text中的列name建立普通索引名稱index_n
13 create index index_age on my_test(age DESC); #爲age作降序索引
14 create index index_age_name on my_test(age,name DESC);#創建表列age和name的聯合索引;按照age升序後再按照name降序排序
15 
16 #刪除索引
17 drop index index_n on my_test;
18 
19 #修改索引
20 alter table my_test drop index index_age;#刪除索引
21 alter table my_test add index index_age(age);
相關文章
相關標籤/搜索