美文网首页MySQL数据库mysql 知识库
数据库索引介绍和使用

数据库索引介绍和使用

作者: 爱秋刀鱼的猫 | 来源:发表于2018-03-04 19:40 被阅读46次
一、索引的概念

索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

二、索引的优点:
  • 加快数据查询速度
三、索引的缺点
  • 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
  • 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度
四、索引分类

1.直接创建索引和间接创建索引
直接创建索引:

CREATE INDEX mycolumn_index ON mytable (myclumn)

间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引

2.普通索引和唯一性索引
普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)

唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
3.单个索引和复合索引
单个索引:即非复合索引
复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段 CREATE INDEX name_index ON username(firstname,lastname)
4.聚簇索引和非聚簇索引(聚集索引,群集索引)
聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列
CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH
ALLOW_DUP_ROW(允许有重复记录的聚簇索引)
非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

索引使用原则:

1、使用索引来更快地遍历表。
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在
对各种查询的分析和预测上。一般来说:

a.有大量重复值、且经常有范围查询( > ,< ,> =,< =)和order by、group by发生的列,可考
虑建立群集索引;
b.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
c.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引,维护索引集合就要做相应的更新工作。

2、在海量查询时尽量少用格式转换。
3、ORDER BY和GROPU BY使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。
4、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
5、IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。

一个例子:
我有一个会员信息表users,里边有37365条用户记录:

在不加索引的时候进行查询:
sql语句A:
select * from users where username like ’%许%’;
在Mysql-Front中的8次查询时长为:

1.40,0.54,0.54,0.54,0.53,0.55,0.54 共找到960条记录

sql语句B:
select * from users where username like ’许%’;
在Mysql-Front中的8次查询时长为:

0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 共找到836条记录

sql语句C:
select * from users where username like ’%许’;
在Mysql-Front中的8次查询时长为:

0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 共找到7条记录

为username列添加索引:
create index usernameindex on users(username(6));

再次查询:
sql语句A:
select * from users where username like ’%许%’;
在Mysql-Front中的8次查询时长为:

0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 共找到960条记录

sql语句B:
select * from users where username like ’许%’;
在Mysql-Front中的8次查询时长为:

0.06,0.07,0.07,0.07,0.07,0.07,0.06,0.06 共找到836条记录

sql语句C:
select * from users where username like ’%许’;
在Mysql-Front中的8次查询时长为:

0.32,0.31,0.31,0.32,0.31,0.32,0.31,0.31 共找到7条记录

在实验过程中,我没有另开任何程序,以上的数据说明在单表查询中,建立索引的可以极大地提高查询速度。
另外要说的是如果建立了索引,对于like ’许%’类型的查询,速度提升是最明显的。因此,我们在写sql语句的时候也尽量采用这种方式查询。

自这里摘录

相关文章

  • MySQL索引类型

    概述     今天为大家详细介绍一下数据库的几种索引类型、使用方式和场景。 1、普通索引     最基本的索引,它...

  • 数据库索引介绍和使用

    一、索引的概念 索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个...

  • Sql索引优化—转载

    数据库索引使用方式 使用索引是提高数据库查询效率的主要方式,下面从索引结构,索引类型,索引操作,命中索引几个方面来...

  • mysql 数据索引的使用 --- 2020-12-02

    MySql索引详细介绍及正确使用方法 1.前言: 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调...

  • Mysql的聚集索引与辅助索引

    Mysql数据库中的B+树索引可以分为聚集索引和辅助索引(非聚集索引)。本文将介绍一下两者。 聚集索引 聚集索引:...

  • postgreSQL 索引(一)索引介绍

    总体介绍 索引是增强数据库性能的常用手段。索引的优点是可以帮助我们更快的查找和获取指定的行数据。但是如果数据库索引...

  • 《设计数据密集型应用》第三章(3) OLTP与OLAP

    前面我们介绍了数据库的存储和提取这两个话题,介绍了LSM-tree和B-tree这两个最普遍使用的数据索引模型,这...

  • MySQL B+树索引和哈希索引的区别

    索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录。索引有多种类型,就像字典有拼音查找和...

  • Python 数据处理(二十八)—— MultiIndex 分层

    前言 本节将介绍使用多级索引(分层索引)和其他高级索引技巧 分层索引(MultiIndex) 分层或多级次索引的存...

  • 关于索引

    目录 1.索引的概念; 2.索引的分类; 3.索引的结构和原理; 4.索引的使用策略; 一.概念 在解释数据库索引...

网友评论

  • 二楠:其实不是特别懂建立索引的意思。
    二楠:@爱秋刀鱼的猫 懂了,谢谢
    爱秋刀鱼的猫:@二楠 例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于数据库的索引底层是B+数,是优化过的,因而查找次数要少的多。
  • b17d5b9bcba1:最后的对比比较直观!前面的还有点晕๑_๑🙄
    爱秋刀鱼的猫:@指爱六弦 嗯嗯,这概念东西就是很晦涩。我也说不大清楚,会努力哒

本文标题:数据库索引介绍和使用

本文链接:https://www.haomeiwen.com/subject/ghsqfftx.html