精华内容
下载资源
问答
  • sql复合索引使用和注意事项

    千次阅读 2018-05-31 13:16:26
    复合索引的优点和注意事项 概念: 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上; 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引); 复合索引在数据库操作期间所需的开销更小,可以...

    1、定义:    

    单一索引:

    单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;     


    复合索引:

    复合索引也叫组合索引;

    用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。

    复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;    

    同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;     

    设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效;


    2、使用:   

    创建复合索引 :

    CREATE INDEX columnId ON table1(col1,col2,col3) ;

    查询语句: 

      select * from table1 where col1= A and col2= B and col3 = C

    这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,这叫覆盖式查询,这样的查询速度非常快;  


     3、注意事项:    

    1、对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高;    

     select * from table1 where col1=A AND col2=B AND col3=D 

    如果使用

     where col2=B AND col1=A 

    或者 

    where col2=B 

    将不会使用索引。


    2、何时是用复合索引     根据where条件建索引是极其重要的一个原则;     注意不要过多用索引,否则对表更新的效率有很大的影响,因为在操作表的时候要化大量时间花在创建索引中

    3、复合索引会替代单一索引么     如果索引满足窄索引的情况下可以建立复合索引,这样可以节约空间和时间


    4、备注:    

     对一张表来说,如果有一个复合索引 on   (col1,col2),就没有必要同时建立一个单索引 on col1;    

    如果查询条件需要,可以在已有单索引 on col1的情况下,添加复合索引on (col1,col2),对于效率有一定的提高;     

    同时建立多字段(包含5、6个字段)的复合索引没有特别多的好处,相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率和灵活性。


    5、例子:


    转自:https://www.cnblogs.com/summer0space/p/7247778.htm
    l

    展开全文
  • 2.复合索引(组合索引):用户在多个列上建立的索引,这种索引叫做复合索引; 复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引; 同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽...

    数据库优化:https://blog.csdn.net/xingkongtianma01/article/details/80658086

    概念:

    1. 单一索引:是指索引列为一列的情况,即新建索引的语句只实施在一列上;
      2.复合索引(组合索引):用户在多个列上建立的索引,这种索引叫做复合索引;
      复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;
      同时有两个概念叫做窄索引宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引; 设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效;

    使用:

    1.创建索引: create index idx1 on table1(col1,col2,col3)
    2.查询: select * from table1 where col1= A and col2= B and col3 = C
    这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,这叫覆盖式查询,这样的查询速度非常快;

    注意事项:

    1、对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高; select * from table1 where col1=A AND col2=B AND col3=D 如果使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引

    2、何时是用复合索引 根据where条件建索引是极其重要的一个原则; 注意不要过多用索引,否则对表更新的效率有很大的影响,因为在操作表的时候要化大量时间花在创建索引中

    3、复合索引会替代单一索引么 如果索引满足窄索引的情况下可以建立复合索引,这样可以节约空间和时间

    备注:

    对一张表来说,如果有一个复合索引 on (col1,col2),就没有必要同时建立一个单索引 on col1; 如果查询条件需要,可以在已有单索引 on col1的情况下,添加复合索引on (col1,col2),对于效率有一定的提高,同时建立多字段(包含5、6个字段)的复合索引没有特别多的好处,相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率和灵活性

    重点看图 建立了索引后,使用的时候最好将查询条件与索引条件对应

    在这里插入图片描述
    补充(与复合索引无关)
    1.在插入数据或更新索引列数据时,索引列插入的数据需要在BTree中进行比较(比节点小的放在节点左边,比节点大的放在节点右边,一直到找到合适自己的位置)才知道将数据放在哪

    2.对于常见的id列自增长索引,这个索引是一个右斜树,每次的数据保证在上一个节点的数据上+1,这样就一定会比上一个节点数据大,直接挂节点的右边就行,相对我们我们一般的自建索引,就少了比较的环节,所以一般自建索引需要维护自己的 BTree树索引会比id自增索引更耗性能,尤其是批量插入的时候要注意

    在这里插入图片描述

    转:https://www.cnblogs.com/summer0space/p/7247778.html

    展开全文
  • mysql复合索引注意事项

    千次阅读 2017-05-03 19:59:04
     用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);  复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;  同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也...
    概念:
        单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;
        用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);
        复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;
        同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;
        设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效;
    使用:
        创建索引 
        create index idx1 on table1(col1,col2,col3) 
        查询
        select * from table1 where col1= A and col2= B and col3 = C
        这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,这叫覆盖式查询,这样的查询速度非常快;
     
    注意事项:
        1、对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高;
        select * from table1 where col1=A AND col2=B AND col3=D
        如果使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引

        2、何时是用复合索引
        根据where条件建索引是极其重要的一个原则;
        注意不要过多用索引,否则对表更新的效率有很大的影响,因为在操作表的时候要化大量时间花在创建索引中
        3、复合索引会替代单一索引么
        如果索引满足窄索引的情况下可以建立复合索引,这样可以节约空间和时间

    备注:
        对一张表来说,如果有一个复合索引 on (col1,col2),就没有必要同时建立一个单索引 on col1;
        如果查询条件需要,可以在已有单索引 on col1的情况下,添加复合索引on (col1,col2),对于效率有一定的提高
        同时建立多字段(包含5、6个字段)的复合索引没有特别多的好处,相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率和灵活性,简单来说复合索引就是向左靠拢。
    有不懂的加QQ群交流:214862451

    展开全文
  • ORACLE复合索引使用 注意事项

    千次阅读 2011-12-22 10:51:30
    复合索引的第一列一定出现在WHERE子句中。 一.like "%_" 百分号在前.  二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT、GROUP BY等子句中包含非复合索引列 例句: 用不到索引 SELECT  CORP....

     http://blog.sina.com.cn/s/blog_456c25570100i3za.html

    复合索引的第一列一定要出现在WHERE子句中。

    一.like "%_" 百分号在前.
        二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT、GROUP BY等子句中包含非复合索引列

    例句:

    用不到索引

    SELECT
             CORP.BATCHCODE, CORP.CLITNO,  CORP.LOANBLAN
        FROM VI_CORPCLIT_INFO CORP
        WHERE CORP.BATCHCODE = '200910'

    用到索引

    SELECT
             CORP.BATCHCODE, CORP.CLITNO
        FROM VI_CORPCLIT_INFO CORP
        WHERE CORP.BATCHCODE = '200910'
        三.字符型字段为数字时在where条件里不添加引号.

    四.字符型字段||'',并且SELECT、GROUP BY等子句中包含非复合索引列。

    用不到索引

    SELECT
             CORP.BATCHCODE, CORP.CLITNO,  CORP.LOANBLAN
        FROM VI_CORPCLIT_INFO CORP
        WHERE CORP.CLITNO||'' = '200910'

    用到索引

    SELECT
             CORP.BATCHCODE, CORP.CLITNO
        FROM VI_CORPCLIT_INFO CORP
        WHERE CORP.CLITNO||'' = '200910'
        五.对索引列进行运算.需要建立函数索引。

    用不到索引

    SELECT
             CORP.BATCHCODE, CORP.CLITNO,  CORP.LOANBLAN
        FROM VI_CORPCLIT_INFO CORP
        WHERE substr(CORP.CLITNO,1) = '200910'

    用到索引

    SELECT
             CORP.BATCHCODE, CORP.CLITNO
        FROM VI_CORPCLIT_INFO CORP
        WHERE substr(CORP.CLITNO,1) = '200910'
        六。not in, not exist, <>
        七。当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
        八。基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
        九。有时都考虑到了但就是不走索引,drop了从建试试在
        十。B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null  都会走

     

    展开全文
  • 复合索引

    2018-05-27 23:31:23
    何时新建复合索引复合索引又需要注意什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。用户可以在多个列上建立索引,这种索引叫做复合...
  •  用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);  复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;  同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也...
  • MongoDB 复合索引

    万次阅读 2016-12-09 17:43:56
    MongoDB支持复合索引,即将多个键组合到一起创建索引。该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的情形。其次复合索引在使用的时候,也可以通过前缀法来使用索引。MongoDB中的...
  • 预先创建了一个复合索引,分别以 updated_at 和 size 两个字段作为索引依据,其中该collection有94万+个document db.cms_resources.createIndex({updated_at:-1,size:-1},{name:'index_updated_size_desc'});   ...
  • 1.对于复合索引,在Where限制条件中出现所有被索引的列时,优化器会选择走索引; 2.对于复合索引,在Where限制条件中出现联合索引中前导的列,即创建联合索引时前导的列时,优化器会选择走索引; 3.对于创建复合...
  • 复合索引(组合索引)

    2019-03-19 13:05:57
    用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引); 复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引; 同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引...
  • 单一索引和复合索引区别

    千次阅读 2020-03-20 17:53:55
    单一索引和复合索引区别及联系 - BABY的日志 - 网易博客 ... 何时新建复合索引复合索引又需要注意什么呢?本篇文章主要是对网上一些讨论的总结。 一.概念 单一索引是指索引列为一列的情况,即新建索引的语句只实...
  • mysql复合索引

    千次阅读 2019-01-20 21:31:23
    问题:MYSQL INNodb建立复合索引 a,b,c;那么 查询条件 where a =xxx and c= xxx 能用到索引嘛? 回答:可以。 概念: 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上; 用户可以在多个列上建立...
  • Oracle 复合索引

    万次阅读 2016-04-25 17:05:35
    用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行数远远大于索引键的...
  • 复合索引和效率

    2015-11-02 19:24:29
    何时新建复合索引复合索引又需要注意什么呢?本篇文章主要是对网上一些讨论的总结。 一.概念 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。 用户可以在多个列上建立索引,这种索引...
  • 单一索引和复合索引区别及联系

    千次阅读 2017-06-08 10:01:31
    单一索引和复合索引区别及联系 - BABY的日志 - 网易博客 ... 何时新建复合索引复合索引又需要注意什么呢?本篇文章主要是对网上一些讨论的总结。 一.概念 单一索引是指索引列为一列的情况,即新建索引的
  • 引言 复合索引是指包含多个列的索引,单一索引仅包含一列。不论是哪种索引,都旨在加快...而了解这些注意细节,就必须从复合索引的作用方式入手。 一、复合索引的作用方式 所谓“复合”,那一定是包含有多个,...
  • 什么要创建索引 mysql在默认的情况下,表中的数据记录是没有顺序的,就是说,在数据检索的时候,符合条件的数据存在表中的什么位置是不知道的,如果使用select 进行查询,数据库会从第一条数据进行检索,找到第一...
  • SQL Server的复合索引学习

    千次阅读 2017-10-11 16:26:05
    何时新建复合索引复合索引又需要注意什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。用户可以在多个列上建立索引,这种索引叫做复合...
  • 7) 排序索引时,如果where条件包含了索引排序order的时候不在使用了,如果order多个字段可以建立复合索引; 8) like语句操作索引,一般不赞成,”%aaa%”不会使用索引,”aaa%”可以使用; 9) 不使用NOT...
  • oracle中的复合索引

    2018-03-15 10:52:37
    用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。 注意事项 复合索引具有前缀性!也就是建立复合索引时字段顺序很重要。查询sql必须包含复合索引的第一个,才会使用复合索引,而不是全表扫描。 ...
  • 普通索引、唯一索引和复合索引
  • hibernate建立复合索引

    千次阅读 2016-06-18 15:59:40
    1,hibernate执行复合索引两种方式 在一对多的关系中,在多的一方产生做为连接的外键(只是当做外键用,数据表里边是没有外键的),当从一的一端向多的一端查询时,可能在多的一端造成全表查询问题,影响性能,所以...
  • MySql的索引对查询速度的提高非常明显,但是索引种类很多,如复合索引、单列索引,那它们有什么区别和联系呢?下面我会对两者进行分析。 ##数据库创建语句 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,779
精华内容 25,111
关键字:

复合索引要注意什么