`
zouyanfly
  • 浏览: 13212 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库索引,复合索引

 
阅读更多
    在执行性能压测时,排查问题后发现根源是 数据库索引用的不对。实际创建了复合索引,但是select语句执行时,并没有走索引。故在此学习备注一下索引的使用,复合索引的注意点。
一、索引
        首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。
         那么在任何时候都应该加索引么?这里有几个反例:
1、如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了。
2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。
3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新。
 
二、复合索引
       根据你的where条件选择复合索引.如果查询是根据多个列,如where   Name= 'aa '   and   class= 'bb ',那么在Name和Class上建立符合索引会比较好. 但是复合索引的顺序一定要和查询的顺序相同才有效,如果顺序不同,那就没有效果了. 
         是否建立复合索引要根据查询的需要,如果很多查询都是where   Name= 'aa '   and   class= 'bb '这样的形式,那建立复合索引就非常好.如果有一部分查询是where   class= 'cc '   那么你就应该在class上边建立单索引.所以最重要的是根据查询的条件.
三、复合索引对排序的优化:
复合索引只对和索引中排序相同或相反的order by 语句优化。
查询优化器在在where查询中的作用:
如果一个多列索引存在于 列 Col1 和 Col2 上,则以下语句:
Select   * from table where   col1=val1 AND col2=val2
查询优化器会试图通过决定哪个索引将找到更少的行。之后用得到的索引去取值。
1. 如果存在一个复合索引,任何最左面的索引前缀能被优化器使用。所以复合索引的顺序不同,影响索引的选择,尽量将值少的放在前面
如:一个复合索引为 (col1 ,col2, col3)
    那么在索引在列 (col1) 、(col1 col2) 、(col1 col2 col3) 的搜索会有作用。
2. 如果列不构成索引的最左面前缀,则建立的索引将不起作用
如:一个复合索引为 (col1 ,col2, col3),最左前缀是col1,则要使用这个索引,搜索条件where中必须包含col1=val1.
以下执行语句不会走索引:
SELECT * FROM  tb WHERE  col3 = val3  
SELECT * FROM  tb  WHERE  col2 = val2  
SELECT * FROM  tb  WHERE  col2 = val2  and  col3=val3  
3. 如果一个 Like 语句的查询条件不以通配符起始则使用索引。
如:%车 或 %车%   不使用索引。
    车%              使用索引。
 
四、索引的缺点:
1.       占用磁盘空间。
2.       增加了插入和删除的操作时间。一个表拥有的索引越多,插入和删除的速度越慢。如 要求快速录入的系统不宜建过多索引。
 
原文参考:
分享到:
评论

相关推荐

    关于数据库索引的理解(实践总结)

    关于数据库索引的理解(实践总结) 关于复合索引,非复合索引的效率问题!

    达梦数据库查询约束索引.sql

    达梦数据库

    深入解析MongoDB聚合与索引:提升数据库效能的关键策略

    同时,深入探讨MongoDB索引的类型(如单键索引、复合索引、多键索引等),并分析索引的创建、管理和优化策略。此外,文章还介绍了索引对查询性能的影响,包括如何通过explain()方法分析查询和索引效率,以及覆盖查询...

    MySQL进阶学习需要掌握的具体内容解析,MySQL数据库如何使用和优化索引.docx

    索引是MySQL中一个重要的概念,它可以显著提高查询性能。...但是,在使用复合索引时,应该考虑列的顺序,以确保复合索引最大化查询性能。 在MySQL中,避免在WHERE子句中使用函数可以提高查询性能。当您在WHE

    三维GlS数据库的空间索引技术研究与探索

    在对三维索引技术进行了详细的研究的基础上,结合现实应用方面的需求,建立了符合海量点数据方面应用的八义树+二叉树的复合数据组织索引模型。最后利用以上述的复合数据组织索引模型构建了实验模型,并据此实验结果...

    数据库面试资料,面试经常问

    1.索引 是什么?  1.MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据...中聚集索引、次要索引、覆盖索引、复合索引、前缀索引、唯一索引默认都是使用B+树索 引,统称索引。当然,除了B+树之外,还有哈希索引。

    执法案件管理系统-数据库设计.docx

    索引 由前缀和名称两部分组成,前缀是INDEX_,名称是表名+字段名,如果复合索引的构成字段较多,则只包含第一个字段名 视图 由前缀和名称两部分组成,前缀是V_,名称是业务操作名称的拼音缩写。 存储过程 由前缀和...

    Oracle数据库实验操作

    实验36:在块中自定义数据类型,使用复合变量 73 实验37:在块中使用自定义游标 76 实验38:在块中处理错误exception 78 编写程序 80 实验39:触发器 80 实验40:编写函数 82 实验41:编写存储过程 83 实验42:编写...

    基于索引的SQL语句优化之降龙十八掌

    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引; 8、频繁进行数据操作的表,不要建立太多的索引; 9、删除无用的索引,避免对执行计划造成负面影响; 以上是一些普遍的建立索引时的...

    海量数据库解决方案_韩国_李华植

    1.3.3 复合表聚簇31 1.3.4 聚簇表的代价34 1.3.5 哈希聚簇39 .第2章 索引的类型和特征43 2.1 b-tree 索引44 2.1.1 b-tree 索引的结构44 2.1.2 b-tree 索引的应用47 2.1.3 反向键索引52 2.2 位图索引53 2.2.1 位图...

    Oracle复合索引与空值的索引使用问题小结

    --存在复合索引IX_TEST(A,B) 于是手动测试,环境采用Oracle自带的scott用户下的emp表。 1.首先查看如下语句的执行计划(此时表只有主键索引): 2.添加IX_TEST(deptno,comm)后查看执行计划: 发现依然是全表扫描...

    Oracle数据库设计策略及规范.docx

    在对建有复合索引的字段进行检索时,应注意按照复合索引字段建立的顺序进行。例如,如果对一个5万多条记录的流水表以日期和流水号为序建立复合索引,由于在该表中日期的重复值接近整个表的记录数,用流水号进行查询...

    海量数据库解决方案_韩国_李华植_Part02

    1.3.3 复合表聚簇31 1.3.4 聚簇表的代价34 1.3.5 哈希聚簇39 .第2章 索引的类型和特征43 2.1 b-tree 索引44 2.1.1 b-tree 索引的结构44 2.1.2 b-tree 索引的应用47 2.1.3 反向键索引52 2.2 位图索引53 2.2.1 位图...

    关系型数据库性能体系设计和效率提升.docx

    5.1.1单列索引与复合索引 15 5.1.2 唯一索引与非唯一索引 15 5.1.3 B树索引、位图索引与函数索引 15 5.2 命名规范 15 5.3 索引设计规范 15 5.3.1 指定表空间规范 16 5.3.2 主键索引的规范 16 5.3.3 唯一约束索引的...

    三种方法教你创建DB2联合数据库

    本资源介绍了一种纯手动创建DB2联合数据库的方法,每个步骤配以文字和图片说明,手把手教你完成DB2联合数据库的创建。本资源还引用了网上常见的两种创建DB2联合数据库的方法供大家参考。

    数据库设计准则及方法论.docx

    优化复合索引。 注意索引的相关参数。 注意索引与谓词的关系。 根据查询所使用的列表建立索引。 根据条件语句中的谓词的选择度创建索引。 避免在建有索引的列上使用函数。 在那些需要被排序的列上创建索引。 合理...

    深入理解MongoDB的复合索引

    当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。 mongo-9552:PRIMARY> db.person.find() { "_id" : ...

    数据结构与数据库设计.pptx

    物理结构设计的主要内容是:确定库文件的组织形式(如,选择独立索引文件的组织形式或结构复合索引文件的组织形式)和存储介质的分配(如,将经常变动的、存取频度较大的数据放在高速存储器上,将相对固定不变的、存取...

    数据库应用 实验三

    总体实验目的 1)理解视图的概念 2)了解数据表的结构特点 ...6)学会创建唯一、聚集、非聚集以及复合索引 7)学会查看和修改索引选项,以及给索引改名和删除索引 9)学会数据汇总、连接查询、嵌套查询的方法

    数据库系统原理上机实验.doc

    对索引的操作: 同上 3) 针对给定的数据库模式和具体应用需求,创建唯一索引、函数索引、复合索引等 ;修改索引;删除索引。设计相应的SQL查询验证索引有效性。 3、实验仪器设备 1) 学生每个一台PC机 2) 已安装SQL ...

Global site tag (gtag.js) - Google Analytics