什么是索引
索引就是用来便利搜索的数据结构。比如有一个一万条数据的员工表,现在要查询“张三”的信息,数据库需要将一万条数据检索一遍,这样并不机智。在姓名这一字段加了索引之后,就可以词典的目录一样,表明姓张的在900-930行之间,只需要检索这30行就可以了 ,很明显极大的提高了查询的效率 。这就是索引的作用,为了满足类似目录的功能而被创造,好处就是可以极大提高查询效率。
我觉得在学习功能性较强的软件时,弄懂一个知识点应该从功能入手,理解数据库查询的需求和索引功能之后,如何创建,调用,删除等只是语法问题,没有难度 。理解运行的整个过程之后,某个功能的优势和劣势也就自然而然的明白了。
如何创建
语法为 CREATE INDEX index_Name ON table_Name(field_Name );
比如在 表student中 class这一列创建名为class_index的索引。
mysql> CREATE INDEX class_index ON student(class); --在
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0
如何调用
索引和函数不同,不用主动调用,比如在查询 一班的学生 ,执行 select * from student where class =‘1’ 数据库检查该列是否建立索引,如果有就会调用,也就是说,数据库自动调用。
如何查看
索引是依赖表的,可以查看某个表上创建的索引, 语法 show index from table_Name ;
mysql> SHOW INDEX FROM student;
+---------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+---------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| student | 0 | PRIMARY | 1 | s_num | A | 3 | NULL | NULL | | BTREE | | | YES |
| student | 1 | class_index | 1 | class | A | 2 | NULL | NULL | YES | BTREE | | | YES |
+---------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
2 rows in set (0.05 sec)
如何删除
删除索引语法: drop index class_index on table_Name;
mysql> drop index class_index on student;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
索引种类
- 唯一索引/非唯一索引
- 主键索引
- 聚集索引/非聚集索引
- 联合索引
索引的优势和劣势
索引的优点
- 提高数据检索速度,减少查询时间
- 索引可以加快表与表之间的连接
- 建立索引后,排序和分组更加便利
索引的缺点
- 索引占用额外的内存
- 需要花费成本去创建索引,维护索引。当数据量较大时,维护的成本也增加
- 在插入和修改数据时,都会动态更改索引,为维护数据库增加难度(索引不适合高修改,低查询的数据库)