在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应行的位置,从而快速地找到数据。
索引分类
mysql的索引分为:
普通索引(index)
唯一性索引(unique)
主键(primary key)
哈希索引(HASH)
全文索引(fulltext)
语句:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名[索引类型]ON 表名 (索引列,....)[索引选项]...//索引列:列名[(长度)] [ASC | DESC ]#UNIQUE表示创建的是唯一性索引;FULLTEXT表示创建全文索引;SPATIAL表示为空间索引,可以用来索引几何数据类型的列#索引名:索引在一个表中名称必须是唯一的。#索引类型:部分储存引擎允许在创建索引时指定索引的类型。MySQL支持的索引类型有 B-TREE 和HASH#索引列:指定索引列,长度表示使用列的前面长度个字符创建索引,这可使索引文件大大减少,节省磁盘空间
索引的通用方法
#查看索引
show index from table_name;
#删除索引
drop index index_name on table_name;
普通索引方法
–直接创建索引(length表示使用名称前1ength个字符)
CREATE INDEX index_name ON table_name(column_name(length))
–修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column_name)
–创建表的时候同时创建索引
CREATE TABLE table_name (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) NOT NULL ,
PRIMARY KEY (id),
INDEX index_name (title)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
建立复合索引 。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
注意命名时的习惯了吗?使用“表名字段1名字段2名”的方式
例子
create index xh_xs on xs(学号(5) asc);
//创建普通索引
Query OK, 0 rows affected (1.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from xs; //显示索引
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| xs | 0 | PRIMARY | 1 | 学号 | A | 5 | NULL | NULL | | BTREE | | | YES | NULL |
| xs | 1 | xh_xs | 1 | 学号 | A | 4 | 5 | NULL | | BTREE | | | YES | NULL |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.12 sec)
建表时创建索引
use test;
create table xs_kc
(
学号 char(6) not null,
课程号 char(3) not null,
成绩 tinyint(1),
学分 tinyint(1),
primary key(学号,课程号),
index cj(成绩)
);
SHOW INDEX FROM xs_kc;
创建和删除索引
1.CREATE INDEX创建
2.ALTER TABLE语句创建
ALTER [IGNORE] TABLE 表名
...
| ADD {INDEX|KEY}[索引名]
[索引类型](索引列,...)[索引选项]... #添加索引
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[索引类型](索引列,...)[索引选项]... #添加主键 constraint 语句
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [索引名]
[索引类型](索引列,...)[index_option] ... #添加唯一性约束 UNIQUE
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [索引名]
(索引列,...)[referenncce_definition] #添加外键
- CONSTRAINT [symbol] : symbol 为 主键|UNIQUE键|外键 的名字
3.删除索引
索引的利弊
**利**:加快了查找的速度
**弊**:过多的索引会造成空间浪费以及表的增删改会变麻烦
