索引是对数据库表中的一列或者多列的值进行排序的一种 数据结构 ,使用索引可以快速访问数据库表中的特定信息(避免了全表扫描的耗时)。
- 索引分为: 聚簇索引 和 非聚簇索引 。聚簇索引是按照数据存放的物理位置为顺序的,非聚簇索引不一样;聚簇索引能够提高多行检索的速度,非聚簇索引对于单行的检索很快。
- 常见索引类型: 主键索引 (唯一索引的特例), 唯一索引 (关联的列不能有2行相同的值), 聚集索引 (表中行的物理顺序与键值索引的逻辑顺序相同。一个表只能包含一个聚集索引)
优点:
- 例如:
SELECT * FROM projects WHERE id=110
,没有索引时需要全表扫描projects表直到找到符合项,如果给id列添加索引,则只需要在索引列进行搜索,并且因为索引列是经过某种算法优化过的,所以查找次数要小很多。
- 创建唯一性索引,可以保证数据库表中每一行数据的唯一性
- 可以大大加快数据的检索速度
- 可以加速表与表之间的链接,特别是再实现数据的参考完整性方面
缺点:
- 创建索引和维护索引需要耗时,并且随着数据量的增加时间会增加
- 索引需要占据一定的物理空间
- 对表中的数据进行修改时(增加,删除,更新),索引也需要进行动态维护,降低了数据的维护速度。
实践
-
SHOW INDEX FROM table_name
,显示某表上的所有索引 -
CREATE INDEX index_name ON table_name(col_name)
,为表的某列添加索引 -
CREATE UNIQUE INDEX index_name ON table_name(col1, col2)
,为表的某列添加唯一索引 -
ALTER TABLE table_name DROP INDEX index_name
,修改表:删除表的某个索引
SHOW INDEX FROM projects; # 显示projects表上的所有索引
CREATE INDEX index_school_address ON schools(address DESC) # 以降序索引某列的值
CREATE UNIQUE INDEX index_name ON schools(name) # 添加唯一索引
ALTER TABLE schools DROP index_name ON schools # 删除索引
DROP INDEX index_name ON schools # 同上
-
index_type索引类型: BTREE
-
Non_unique是否不唯一: 0表示唯一索引,1表示不是唯一索引
-
key_name索引名称: PRIMARY(主键索引)/xxx
-
Column_name索引作用的列:一列或者多列(如果某几个条件经常需要组合筛选则可以在这几个列上建立索引)
-
一个索引可以包含多个列,同一个列也可以对应多个索引
-
navicat工具:在ctrl+d设计表页面,点击索引,可以查看当前列上的索引(索引名称、索引类型和索引方法等)
网友评论