`
让往事都随风
  • 浏览: 67179 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Index索引

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

二、索引的特点
1.索引可以加快数据库的检索速度
2.索引降低了数据库插入、修改、删除等维护任务的速度
3.索引创建在表上,不能创建在视图上
4.索引既可以直接创建,也可以间接创建
5.可以在优化隐藏中,使用索引
6.使用查询处理器执行SQL语句,在一个表上,一次只能使用一个索引
7.其他

三、索引的优点
1.创建唯一性索引,保证数据库表中每一行数据的唯一性
2.大大加快数据的检索速度,这也是创建索引的最主要的原因
3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

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

五、索引分类
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.当字段数据更新频率较低,查询使用频率较高并且存在大量重复值是建议使用聚簇索引
2.经常同时存取多列,且每列都含有重复值可考虑建立组合索引
3.复合索引的前导列一定好控制好,否则无法起到索引的效果。如果查询时前导列不在查询条件中则该复合索引不会被使用。前导列一定是使用最频繁的列
4.多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案
5.where子句中对列的任何操作结果都是在sql运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被sql优化器优化,使用索引,避免表搜索(例:select * from record where substring(card_no,1,4)=’5378’
&& select * from record where card_no like ’5378%’)任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边
6.where条件中的’in’在逻辑上相当于’or’,所以语法分析器会将in ('0','1')转化为column='0' or column='1'来执行。我们期望它会根据每个or子句分别查找,再将结果相加,这样可以利用column上的索引;但实际上它却采用了"or策略",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,最后从这个临时表中计算结果。因此,实际过程没有利用column上索引,并且完成时间还要受tempdb数据库性能的影响。in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引
7.要善于使用存储过程,它使sql变得更加灵活和高效

分享到:
评论

相关推荐

    nexus index 索引手动更新

    "nexus index"指的是Nexus仓库中的索引,这个索引包含了仓库中所有组件的元数据,如版本信息、依赖关系等,方便开发者快速查找和下载所需的组件。 在默认情况下,Nexus会定期自动更新其索引,但这个过程可能比较...

    Oracle_Index 索引

    Oracle_Index 索引

    Oracle_Index 索引3

    本文将基于标题“Oracle_Index 索引3”及描述“Oracle_Index 索引”,深入探讨Oracle索引的基础知识、B树索引的构造原理及其对数据库性能的影响,旨在帮助读者更全面地理解Oracle索引的运作机制。 #### Oracle索引...

    Nginx-Index索引页面

    **Nginx-Index索引页面** 在Nginx服务器配置中,`index`指令用于定义默认的索引页面,当用户访问一个目录时,如果该目录下存在这个指定的索引文件,Nginx会自动加载并显示该页面,而无需用户手动输入文件名。这极大...

    index索引使用模式

    INDEX FULL SCAN 会扫描整个索引的所有条目,按照索引顺序返回结果,但不能并行读取。这种模式适合于需要按索引顺序输出所有数据的情况,但如果数据量大,性能可能不如其他模式。 3. **INDEX FAST FULL SCAN** ...

    Oracle Index 索引介绍

    2. **位图索引(Bitmap Index)** 位图索引主要用于低基数(非唯一或重复值多)的列,将每个值用一个位来表示,节省空间,适合在并集查询中使用。 3. **反向索引(Reverse Index)** 反向索引主要应用于长文本...

    Python DataFrame 设置输出不显示index(索引)值的方法

    在输出代码行中,加入“index=False”... 您可能感兴趣的文章:Python将DataFrame的某一列作为index的方法pandas将DataFrame的列变成行索引的方法python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)Py

    Oracle_Index 索引2

    Oracle支持多种索引类型,包括B*Tree索引、反向索引、降序索引、位图索引、函数索引等。每种索引都有其独特的适用场景和优缺点,了解并合理应用这些索引,对优化Oracle数据库性能至关重要。 #### 二、B*Tree索引...

    index索引的8种使用模式

    INDEX FAST FULL SCAN与INDEX FULL SCAN类似,但前者只适用于B树索引,且索引包含被选择列的数据。当查询列数据量大,且需要快速检索所有数据时,Oracle会优先考虑此模式。例如: ```sql SELECT object_type FROM ...

    SAP 索引 index

    ### SAP Index索引及其对性能的影响 #### 一、SAP表中的索引(Indexing in SAP Tables) 在SAP系统中,索引是数据库表的一种副本,它仅包含少数几个字段,并始终以排序形式存在。索引的主要目的是提高数据访问速度,...

    Oracle Index索引无效的原因与解决方法

    Oracle Index索引无效的原因可能涉及多种因素,这些因素可能导致索引无法被数据库有效利用,从而影响SQL查询的性能。在解决此类问题时,首先要确定索引是否被启用和使用。以下是一些常见的索引无效或未被利用的原因...

    MySQL数据库:创建索引.pptx

    使用CREATE INDEX语句可以在一个已有表上创建索引,一个表可以创建多个索引。 语法格式: CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: UNIQUE:表示创建的是唯一性索引 ...

    luke 源代码(luke Lucene index 索引 源代码)

    《深入理解Luke:Lucene索引查看工具的源代码解析》 Luke,作为一个开源的Lucene索引浏览器,为开发者提供了直接查看和分析Lucene索引的能力。它不仅是一个强大的工具,也是学习Lucene索引机制的重要途径。通过阅读...

    DataFrame修改index索引和columns列名

    DataFrame修改index索引和columns列名 修改索引index 1、采取直接赋值的方法: df1=pd.DataFrame(np.arange(9).reshape(3,3),index=['bj','sh','gz'],columns=['a','b','c']) print(df1) #修改index,直接给index...

    解决pycharm运行程序出现卡住scanning files to index索引的问题

    在使用PyCharm进行Python开发时,可能会遇到一个常见的困扰:程序在启动或运行时被“卡住”,显示为“Scanning files to index”。这个问题通常是由于PyCharm正在后台索引项目中的所有文件,以便提供代码智能提示、...

    MySQL-数据库-索引详解

    MySQL 数据库索引详解 MySQL 数据库索引是一种特殊的数据库结构,可以快速查询数据库表...CREATE INDEX 索引名 ON mytable(列名(length)); ``` 注意添加索引的长度必须小于建表时给字段定义的长度,也可以不给长度。

    python for 循环获取index索引的方法

    以上这篇python for 循环获取index索引的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python中for循环输出列表索引与对应的值方法讲解Python中...

    mysql 索引失效详解

    创建索引的语法为:`CREATE INDEX 索引名 ON 表名 (列名)`。例如,创建一个名为 `idx_code_age_name` 的索引在 `test1` 表的 `code`、`age` 和 `name` 列上: ``` CREATE TABLE `test1` ( `id` bigint NOT NULL, `...

Global site tag (gtag.js) - Google Analytics