是一个排序的列表,存储着索引值和这个值所对应的物理地址无须对整个表进行扫描,通过物理地址就可以找到所需数据是表中一列或者若干列值排序的方法需要额外的磁盘空间。
数据库利用各种快速定位技术,能够大大加快查询速率当表很大或查询涉及到多个表时,可以成千上万倍地提高查询速度可以降低数据库的IO成本,并且还可以降低数据库的排序成本通过创建唯一性索引保证数据表数据的唯一性可以加快表与表之间的连接在使用分组和排序时,可大大减少分组和排序时间。
##############格式#######################
CREATE INDEX index_name ON table_name(length); //length是表中的某个筛选某个列
mysql> create index index_tmp on info(name); //info 原表,index_tmp 是索引名
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
############## 查看索引表 #######################
mysql> show index from info\G; //查看索引表
*************************** row ***************************
Table: info
Non_unique: 1
Key_name: index_tmp
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
3 rows in set (0.00 sec)
############## 删除索引表 #######################
mysql> drop index index_tmp on info; //删除索引表,index_tmp 是索引表,info是原表
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
与“普通索引”基本相同
与普通索引的区别是索引列的所有值只能出现一次,即必须唯一
创建唯一索引的方式
方法一 unique
############## 格式 #######################
create unique index unique_name ON table_name(length);
############## 案例 #######################
mysql> create unique index unique_tmp on info(name); //info 原表,unique_tmp唯一索引表
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
方法二 alter
############## 格式 #######################
alter table table_name ADD unique unique_name (length);
############## 案例 #######################
mysql> alter table info add unique unique_tmp(name);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
############## 格式 #######################
CREATE TABLE table_name (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) NOT NULL ,
PRIMARY KEY (id)
);
############## 案例 #######################
mysql> create table info01(
-> id int(11) not null auto_increment,
-> title char(255) not null,
-> primary key (id)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc info01; //查看表结构
+-------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | char(255) | NO | | NULL | |
+-------+-----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql>
CREATE TABLE user(
name varchar(9),
age int(3),
sex tinyint(1),
INDEX user(name, age, sex)
);
mysql> create table user03(
-> id int(11) not null auto_increment,
-> title char(255) character set utf8 collate utf8_general_ci not null,
-> content text character set utf8 collate utf8_general_ci null,
-> time int(10) null default null,
-> primary key(id),fulltext(content)
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> desc user03;
+---------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | char(255) | NO | | NULL | |
| content | text | YES | MUL | NULL | |
| time | int(10) | YES | | NULL | |
+---------+-----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> alter table info add fulltext index_content(name); //info原表,index_content 是新建全文索引表
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info\G; //查看全文索引表
*************************** row ***************************
Table: info
Non_unique: 1
Key_name: index_content
Seq_in_index: 1
Column_name: name
Collation: NULL
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: FULLTEXT
Comment:
Index_comment:
3 rows in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql> create fulltext index index_content on info(name);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info\G;
*************************** row ***************************
Table: info
Non_unique: 1
Key_name: index_content
Seq_in_index: 1
Column_name: name
Collation: NULL
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: FULLTEXT
Comment:
Index_comment:
3 rows in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql> drop index index_tmp on info; //删除索引表,index_tmp 是索引表,info是原表
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
mysql>drop index index_puid on mapping;
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql>alter table mapping drop index gameid;
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql>show index from tablename;
mysql>show keys from tablename;
索引建立的原则: 索引查询是数据库中重要的记录查询方法,要不要建立索引以及在那些字段上建立索引 都要和实际数据库系统的查
询要求结合来考虑,下面给出实际生产环境中的一些通用的原 则: