数据库索引

索引是对数据库表中的一列或者多列的值进行排序的一种 数据结构 ,使用索引可以快速访问数据库表中的特定信息(避免了全表扫描的耗时)。

  • 索引分为: 聚簇索引非聚簇索引 。聚簇索引是按照数据存放的物理位置为顺序的,非聚簇索引不一样;聚簇索引能够提高多行检索的速度,非聚簇索引对于单行的检索很快。
  • 常见索引类型: 主键索引 (唯一索引的特例), 唯一索引 (关联的列不能有2行相同的值), 聚集索引 (表中行的物理顺序与键值索引的逻辑顺序相同。一个表只能包含一个聚集索引)

优点:

  • 例如:SELECT * FROM projects WHERE id=110,没有索引时需要全表扫描projects表直到找到符合项,如果给id列添加索引,则只需要在索引列进行搜索,并且因为索引列是经过某种算法优化过的,所以查找次数要小很多。
  1. 创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  2. 可以大大加快数据的检索速度
  3. 可以加速表与表之间的链接,特别是再实现数据的参考完整性方面

缺点:

  1. 创建索引和维护索引需要耗时,并且随着数据量的增加时间会增加
  2. 索引需要占据一定的物理空间
  3. 对表中的数据进行修改时(增加,删除,更新),索引也需要进行动态维护,降低了数据的维护速度。
实践
  • 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设计表页面,点击索引,可以查看当前列上的索引(索引名称、索引类型和索引方法等)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容