一、索引是什么
索引是对数据库表一列或者多列的值进行排序的一种数据结构,使用索引可以提高数据库中特定数据的查询速度。
-
-
一颗b+树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针p1、p2、p3。
-
真实的数据存在于叶子节点,即3、5、9、10、13、15、28、29、36、60、75、79、90、99
-
-
查找过程
三、索引的特点
3.1、索引的优点
-
加快查询速度。
-
实现数据的参考完整性方面,可以加速表和表之间的连接。
-
在分组和排序查询时,可以显著减少查询中分组和排序的时间。
-
建立索引。提高数据检索效率,降低数据库的IO成本
-
3.2、索引的不足
-
-
索引耗费磁盘空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
-
当表中的数据进行增加,删除,修改时,索引也要动态地维护,降低了数据的维护速度。
-
3.3、索引的分类
-
-
单列索引和组合索引
单列索引:即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引:指在表的多个字段组合上创建的索引,只有在查询条件。 -
全文索引
类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复 值和空值。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建。MySQL中只有MyISAM存储引擎支持全文索引。 -
空间索引
空间索引:是对空间数据类型的字段建立索引,MySQL中的空间类型数据有4中geometry、point、linestring、polygon,MySQL使用SPATIAL关键字进行扩展,使得能够用于创建正 规索引类似的语法创建空间索引,创建空间索引的列,必须将其声明为 NOT NULL,
-
-
避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。而对经常用于查询的字段创建索引。
-
数据量小尽量不用索引。数据重复且分布平均的字段(例如性别字段)尽量不用索引。
-
在条件表达式中经常用到的不同值较多的列建立索引。
-
当唯一性是某种数据本身的特征时,指定唯一的索引
-
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度(排序时字段的顺序最好和创建索引的顺序一致,否则会出现文件内排序)
五、创建索引
- 创建表的时候创建索引
CREATE TABLE table_name [col_name data_type], [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [index_name] (col_name [length]) [ASC|DESC]
-
-
INDEX、KEY:为同义词,两者作用相同,用来指定创建索引。
-
col_name:需要创建索引的字段列,
-
CREATE TABLE idx_test ( id VARCHAR (30), NAME VARCHAR (30), -- 建表时同时创建索引 -- 唯一索引 UNIQUE INDEX idx_b_id (id), -- 普通索引 INDEX idx_b_name (NAME) )
- 在已经存在的表上创建索引
-- 方式一: ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name[LENGTH],....) [ASC|DESC] -- 方式二: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col_name[LENGTH],...) [ASC|DESC]
SHOW INDEX FROM TABLE_NAME;
六、删除索引
-- 方式一: ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME; -- 方式二: DROP INDEX INDEX_NAME ON TABLE_NAME;