1.索引:提高数据库的性能,不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。查询速度的提高是以插入、更 新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。
2.常见索引分为:
主键索引(primary key)
唯一索引(unique)
普通索引(index)
全文索引(fulltext)--解决中子文索引问题。
3.索引的说明:
占用磁盘空间
当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大。
当我们添加一个索引,不能够解决所有查询问题,需要分别给字段建立索引;例如 select * from EMP where ename='abcdef';
索引是以空间换时间
4.索引创建原则
比较频繁作为查询条件的字段应该创建索引
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
更新非常频繁的字段不适合作创建索引
不会出现在where子句中的字段不该创建索引
5.创建主键索引
(1)在创建表的时候直接在字段名后指定primary key
create table d(
-> id int primary key,name varchar(10));
(2) 在创建表的最后,指定某列或某几列为主键索引
create table h(
-> id int,name varchar(10),primary key(id));
(3) 创建表以后再添加主键
create table a(
-> id int,name varchar(10));
alter table a add primary key(id);
主键索引的特点:
一个表中,最多有一个主键索引,当然可以使符合主键
主键索引的效率高(主键不可重复)
创建主键索引的列,它的值不能为null,且不能重复
主键索引的列基本上是int
6.唯一索引的创建同主键索引创建方法 一致,只不过把主键索引的关键字换成唯一索引的关键字unique
唯一索引的特点:
一个表中,可以有多个唯一索引
查询效率高
如果在某一列建立唯一索引,必须保证这列不能有重复数据
如果一个唯一索引上指定not null,等价于主键索引
7.普通索引创建也同上面三种方法,只是将关键字换成index即可。
普通索引的特点:
一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引
8.查询索引
(1)show keys from 表名
show keys from a;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| a | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
(2)show index from 表名
(3)最简洁的方法
desc 表名
9.删除索引
(1)删除主键索引
(2)删除其他索引
alter table 表名 drop index 索引名,索引名就是show keys from 表名 中的 Key_name 字段
(3)drop index 索引名 on 表名
drop index name on users;