精华内容
下载资源
问答
  • 索引的理解: 索引是对数据库表中的一列或多列的值进行排序的一种数据结构。 索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要 的内容,mysql在300万条记录性能就下降了,...

    索引的理解:

      索引是对数据库表中的一列或多列的值进行排序的一种数据结构。
      索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要的内容,mysql在300万条记录性能就下降了,虽然mysql官方文档说达500万~800万,所以当数据达到几百万的时候,那么索引就很有必要了。
      当表中有大量记录的时候,若要对表进行查询,第一种就是就需要把表中的记录全部取出来,在和查询条件一一对比,然后返回满足条件的记录、这样做就会大大消耗数据库系统的时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中ROWID(相当于页码)快速找到表中的记录。

    语句:

    CREATE TABLE table_name[filed_name data type]
    [unique|fulltext][index|key][index_name](filed_name[length])[asc|desc]

    1. unique|fulltext为可选参数,分别表示唯一索引、全文索引
    2. index和key为同义词,两者作用相同,用来指定创建索引
    3. filed_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择
    4. index_name指定索引的名称,为可选参数,如果不指定,默认filed_name为索引值
    5. length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度
    6. asc或desc指定升序或降序的索引值存储

    索引类型:

    一、唯一索引(unique):列的值必须唯一,但允许有空值。如果是组合索引则列值必须唯一

    1)、创建唯一索引

    CREATE UNIQUE INDEX index_name ON table(column(length))

    2)、修改表结构

    ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))

    3)、创建表时直接指定

    CREATE TABLE `table_name`(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `code` INT(8) NOT NULL,
    `title` VARCHAR(255) NOTNULL,
    `content` TEXT,
    `time` INT(10) NULL DEFAULT NULL,
    UNIQUE index_name(code)
    );

    二、主键索引(primary key):是一特殊的唯一索引,一个表允许有一个主键,主键要求建表时指定.

    CREATE TABLE `table_name`(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `code` INT(8) NOT NULL,
    `title` VARCHAR(255) NOTNULL,
    `content` TEXT,
    `time` INT(10) NULL DEFAULT NULL,
    PRIMARY KEY(`id`)
    );

    三、普通索引(index):最基本的索引,没有任何限制。如果是char,varchar类型,length可以小于字段长度、如果是BLOB和TEXT类型,必须指定长度。

    1)、直接创建

    CREATE INDEX index_name ON table(column(length))

    2)、修改表结构的方式添加

    ALTER TABLE table_name ADD INDEX index_name ON (column(length))

    3)、创建表时直接指定

    CREATE TABLE `table_name`(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(255) NOTNULL,
    `content` TEXT,
    `time` INT(10) NULL DEFAULT NULL,
    PRIMARY KEY(`id`),
    INDEX index_name(title(length))
    );

    4)、删除索引

    DROP INDEX index_name ON table

    四、多列索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段索引才会使用。使用组合索引遵循最左前缀原则
    五、全文索引(fulltext):主要是用来查找文本的关键字,而不是直接与索引中的值比较。fulltext索引跟其他索引大不相同,它更像一个搜索引擎,而不是简单的where语句的参数匹配。fulltext要配合match against操作使用,而不是一般的where语句加like。它可以在create tablealter tablecreate index使用,不过目前只有char varchar text列上可以创建全文索引。

    tip:全文索引只有MyISAM支持,不过在mysql5.6后Innodb也支持了

    1)、创建表的时候添加全文索引


    CREATE TABLE `table_name`(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(255) NOTNULL,
    `content` TEXT,
    `time` INT(10) NULL DEFAULT NULL,
    FULLTEXT (content)
    );

    2)、修改表结构添加全文索引

    ALTER TABLE table_name ADD FULLTEXT index_name(content)

    3)、直接创建索引

    CREATE FULLTEXT INDEX index_namet ON table_name(content)

    缺点:

    1. 虽然索引大大的提升了查询的速度,同时也降低了对表的增删改的速度,因为更新表,不仅要保存数据,还要保存索引文件
    2. 建立索引会占用磁盘空间。一般不太严重,如果你在一个大表上创建多种组合索引,索引文件会增长很快索引只是提高效率的一个因素,如果有大数据量的表,就要花时间研究建立最优秀的索引,或优化查询语句

    索引方式:

        对于BTREE和HASH索引,当使用=、<=>、IN、IS NULL或者IS NOT NULL操作符时,关键元素与常量值的比较关系对应一个范围条件。Hash索引还有一些其它特征:它们只用于使用=或<=>操作符的等式比较(但很快)。优化器不能使用hash索引来加速ORDER BY操作。(该类索引不能用来按顺序搜索下一个条目)。MySQL不能确定在两个值之间大约有多少行(这被范围优化器用来确定使用哪个索引)。如果你将一个MyISAM表改为hash-索引的MEMORY表,会影响一些查询。只能使用整个关键字来搜索一行。(用B-树索引,任何关键字的最左面的前缀可用来找到行)。

        对于BTREE索引,当使用>、<、>=、<=、BETWEEN、!=或者<>,或者LIKE ‘pattern’(其中 ‘pattern’不以通配符开始)操作符时,关键元素与常量值的比较关系对应一个范围条件。“常量值”系指:查询字符串中的常量、同一联接中的const或system表中的列、无关联子查询的结果、完全从前面类型的子表达式组成的表达式。

    下面是一些WHERE子句中有范围条件的查询的例子。
    下列范围查询适用于 btree索引和hash索引:

    SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,20);

    下列范围查询适用于btree索引

    SELECT * FROM t1 WHERE key_col > 1 AND key_col < 10;
    SELECT * FROM t1 WHERE key_col LIKE 'ab%' OR key_col BETWEEN 'bar' AND 'foo';

    创建索引原则与使用索引注意事项:

    1. 选择唯一索引

      唯一索引的值是唯一的,可以更快速的通过该索引确定某一条记录

    2. 为经常需要排序、分组和联合操作的字段建立索引

      经常需要order by、 group by、distinct和union等操作的字段,排序会浪费很多时间,如果为其建立索引,可以有效避免排序操作

    3. 经常作为查询条件的字段建立索引

      如果某个字段经常作为查询条件,name该字段的查询速度就会影响整个表的速度。因此,为这样的字段建立索引,可以提高整个表的查询速度

    4. 限制索引的数目

      索引的数目不是越多越好。每个索引都是要占用磁盘空间的,索引越多,需要的磁盘空间就越大。修改表时,和更新会很麻烦。越多的索引,会使更新表变得很浪费时间

    5. 尽量使用数据量少的索引

      如果索引的值很长,那么查询的速度就会受到影响,例如对一个char(100)类型的字段进行全文检索需要的时间肯定要比char(10)类型的字段需要的时间多得多,并且char(10)全文检索而且可以节省磁盘空间和I/O操作。

    6. 尽量使用前缀来索引

      如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

    7. 删除不再使用或者很少使用的索引

      表中的数据被大量更新,或者数据使用方式被改变后,原有的一些索引可能不在需要。数据库管理员应当定期找出这些索引,将它们删除。从而减少索引对更新操作的影响

    8. 最左前缀原则,非常重要的一个原则

      mysql会一直向右匹配知道遇到范围查询(>、<、between、like)就停止匹配,比如a=1 and b=2 and c>3 and d=4 如果建立(a,b,c,d)顺序索引,d是用不到索引的,如果是建立(a,b,d,c)则可以都用到

    9. =和in可以乱序

      比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

    10. 尽量选择区分度高的列作为索引。

      区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就 是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条 记录

    11. 索引列不能参与计算,保持列“干净”。

      select * from users where YEAR(adddate)<'2007';
      将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:
      select * from users where adddate<‘2007-01-01';

    12. 尽量的扩展索引,不要新建索引。

      比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

    13. 不使用NOT IN和<>操作

    14. like语句操作

      一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

    15. 索引列排序

      MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    16. 索引不会包含有NULL值的列

      只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。


    注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。

    索引优化:

    一、导致SQL执行慢的原因

    1. 硬件问题。如网络速度慢,内存不足,I/O吞吐量少,磁盘空间满了等。
    2. 没有索引或索引失效。
    3. 数据过多(分库分表)。
    4. 服务器调优及各个参数设置(调整my.cnf)

    二、分析原因时,一定要找切入点

    1. 先观察,开启慢查询日志,设置相应的阈值(比如超过2秒就是慢SQL),在生产环境上跑一天以后,看看那些SQL比较慢
    2. Explain和慢SQL分析。比如写的烂的SQL语句,索引没有或失效,关联查询太多(有时候是设计缺陷或者不得已的需求)等等
    3. Show Profile是比Explain更进一步的执行细节,可以查询到每一个SQL都干了些什么事,这些事分别花了多少时间
    4. 找DBA或运维对MYsql进行服务器参数调优

    Explain 与 Show Profile详情下两章介绍

    参考:https://blog.csdn.net/GV7lZB0y87u7C/article/details/79969293
       https://blog.csdn.net/u013412790/article/details/51612304

    展开全文
  • 资源名称:SQL Server 视图及索引创建及使用内容简介: 本文档主要讲述的是SQL Server 视图及索引创建及使用;目的是通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除通过企业管理器。希望本文档会给...
  • 索引+索引的类型+创建索引

    千次阅读 2018-09-10 13:53:45
    2索引建立在表的一列或多列上的辅助对象,目的是提高表中数据的访问速度.  3索引是表示数据的另一种方式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序。  4索引的特殊作用是在表内重新排列记录的物理位置 ...

    索引 
    1在关系数据库中,索引是一种与表有关的数据库结构,它是除了表以外的另一个重要模式对象。 
    2索引建立在表的一列或多列上的辅助对象,目的是提高表中数据的访问速度. 
    3索引是表示数据的另一种方式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序。 
    4索引的特殊作用是在表内重新排列记录的物理位置 
    5建立索引需要消耗空间大小为表的1.2倍 
    索引的类型 
    B树索引,反向键索引,位图索引,基于函数的索引,簇索引,全局索引,局部索引等.

    创建索引 
    语法: 
    create unique | btimap index < schema>.< index_name> 
    on < schema>.< table_name> 
    (< column_name > | < expression> asc |desc 【,……】) 
    tablespace< tablespace_name> 
    storage< storage_settings> 
    logging | nologging 
    compute statistics 
    nocompress | compress< nn> 
    nosort | reverse 
    partition |global partition< partition_setting>;

    unique :表示创建的表中的每一行在索引中 都是具有唯一值,也就是创建唯一索引 
    btimap :创建一个位图索引。 
    如果不指定unique ,btimap 那么表示创建的索引是B树索引. 
    < schema>.< index_name>:索引名称 
    < schema>.< table_name>:指定索引基于哪个用户模式下的哪个表 
    column_name :指定表中的列,可以多个列,逗号分隔,可以指定列的排列方式,默认asc。 
    tablespace< tablespace_name>:指定存储表空间 tablespace_name 
    storage< storage_settings>:表示用户可以对存储在表空间的存储参数进行设置,如果不指定该字句,那么使用表空间的默认存储参数。 
    logging | nologging:在创建索引的时候,是否创建相应的日志记录,默认logging. 
    nologging好处更快完成创建索引的操作,缺点:不会产生重做日志信息。 
    compute statistics:oracle在创建索引的过程中,直接生成关于索引的统计信息,这样可以避免以后对索引进行分析操作. 
    nocompress | compress< nn>:该选项是对复合索引而言的,compress在创建索引时候,对重复的索引进行压缩,以节省存储空间。默认是nocompress ,表示不进行任何压缩,因为压缩会影响使用效率。 
    nosort : 创建索引时候,不进行排序,加快索引创建速度,节省排序空间。 
    也就是告诉oracle该表中已经存在的数据已经根据column_a排序,你不需要再去给我排序了;如果表中记录是无序的,在使用norsort会有错误信息。 
    reverse:反转 
    partition|global partition< partition_setting>;多个服务并行来创建索引。

    下面内容转载 
    http://3y.uu456.com/bp_8e7pq1xu8a8wrp7237uy_1.html 
    1.2 索引特点:

    第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

    第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

    第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

    第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

    1.3 索引不足:

    第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

    第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

    第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    1.4 应该建索引列的特点:

    1)在经常需要搜索的列上,可以加快搜索的速度;

    2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

    3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

    4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

    5)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

    6)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

    1.5 不应该建索引列的特点:

    第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

    第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

    第三,对于那些定义为blob数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。

    第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

    1.6 限制索引

    限制索引是一些没有经验的开发人员经常犯的错误之一。在SQL中有很多陷阱会使一些索引无法使用。下面讨论一些常见的问题:

    1.6.1 使用不等于操作符(<>、!=)

    下面的查询即使在cust_rating列有一个索引,查询语句仍然执行一次全表扫描。 select cust_Id,cust_name from customers where cust_rating <> ‘aa’;

    把上面的语句改成如下的查询语句,这样,在采用基于规则的优化器而不是基于代价的优化器(更智能)时,将会使用索引。

    select cust_Id,cust_name from customers where cust_rating < ‘aa’ or cust_rating > ‘aa’; 特别注意:通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描。

    1.6.2 使用IS NULL 或IS NOT NULL

    使用IS NULL 或IS NOT NULL同样会限制索引的使用。因为NULL值并没有被定义。在SQL语句中使用NULL会有很多的麻烦。因此建议开发人员在建表时,把需要索引的列设成 NOT NULL。如果被索引的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索引,关于位图索引在稍后在详细讨论)。

    1.6.3 使用函数

    如果不使用基于函数的索引,那么在SQL语句的WHERE子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。 下面的查询不会使用索引(只要它不是基于函数的索引)

    select empno,ename,deptno from emp where trunc(hiredate)=’01-MAY-81’;

    把上面的语句改成下面的语句,这样就可以通过索引进行查找。

    select empno,ename,deptno from emp where hiredate<(to_date(‘01-MAY-81’)+0.9999);

    1.6.4 比较不匹配的数据类型

    也是比较难于发现的性能问题之一。 注意下面查询的例子,account_number是一个VARCHAR2类型,在account_number字段上有索引。

    下面的语句将执行全表扫描:

    select bank_name,address,city,state,zip from banks where account_number = 990354; Oracle可以自动把where子句变成to_number(account_number)=990354,这样就限制了索引的使用,改成下面的查询就可以使用索引:

    select bank_name,address,city,state,zip from banks where account_number =’990354’;

    特别注意:不匹配的数据类型之间比较会让Oracle自动限制索引的使用,即便对这个查询执行Explain Plan也不能让您明白为什么做了一次“全表扫描”。

    1.7 查询索引

    查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。

    1.8 组合索引

    当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在 Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该索引包含了empno、 ename和deptno。在Oracle9i之前除非在

    where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。

    特别注意:在Oracle9i之前,只有在使用到索引的前导索引时才可以使用组合索引!

    1.9 ORACLE ROWID

    通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图。如果想检查重复值或是其他对ROWID本身的引用,可以在任何表中使用和指定rowid列。

    1.10 选择性

    使用USER_INDEXES视图,该视图中显示了一个distinct_keys列。比较一下唯一键的数量和表中的行数,就可以判断索引的选择性。选择性越高,索引返回的数据就越少。

    1.11 群集因子(Clustering Factor)

    Clustering Factor位于USER_INDEXES视图中。该列反映了数据相对于已建索引的列是否显得有序。如果Clustering Factor列的值接近于索引中的树叶块(leaf block)的数目,表中的数据就越有序。如果它的值接近于表中的行数,则表中的数据就不是很有序。

    1.12 二元高度(Binary height)

    索引的二元高度对把ROWID返回给用户进程时所要求的I/O量起到关键作用。在对一个索引进行分析后,可以通过查询DBA_INDEXES的B- level列查看它的二元高度。二元高度主要随着表的大小以及被索引的列中值的范围的狭窄程度而变化。索引上如果有大量被删除的行,它的二元高度也会增加。更新索引列也类似于删除操作,因为它增加了已删除键的数目。重建索引可能会降低二元高度。

    1.13 快速全局扫描

    从Oracle7.3后就可以使用快速全局扫描(Fast Full Scan)这个选项。这个选项允许Oracle执行一个全局索引扫描操作。快速全局扫描读取B-树索引上所有树叶块。初始化文件中的 DB_FILE_MULTIBLOCK_READ_COUNT参数可以控制同时被读取的块的数目。

    1.14 跳跃式扫描

    从Oracle9i开始,索引跳跃式扫描特性可以允许优化器使用组合索引,即便索引的前导列没有出现在WHERE子句中。索引跳跃式扫描比全索引扫描要快的多。

    下面的比较他们的区别:

    SQL> set timing on

    SQL> create index TT_index on TT(teamid,areacode);

    索引已创建。

    已用时间: 00: 02: 03.93

    SQL> select count(areacode) from tt;

    COUNT(AREACODE)


    7230369

    已用时间: 00: 00: 08.31

    SQL> select /+ index(tt TT_index )/ count(areacode) from tt;

    COUNT(AREACODE)


    7230369

    已用时间: 00: 00: 07.37

    展开全文
  • SQL Server 创建索引(index)

    千次阅读 多人点赞 2019-06-14 18:01:13
    索引的简介: ...索引主要目的是提高了SQLServer系统的性能,加快数据的查询速度与减少系统的响应时间。 但是索引对于提高查询性能也不是万能的,也不是建立越多的索引就越好。索引建少了,用 WHERE...

    索引的简介:

    create index 索引名称 on 表名称(字段名称)

    索引分为聚集索引和非聚集索引,数据库中的索引类似于一本书的目录,在一本书中通过目录可以快速找到你想要的信息,而不需要读完全书。

    索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 。

    但是索引对于提高查询性能也不是万能的,也不是建立越多的索引就越好。索引建少了,用 WHERE 子句找数据效率低,不利于查找数据。索引建多了,不利于新增、修改和删除等操作,因为做这些操作时,SQL SERVER 除了要更新数据表本身,还要连带立即更新所有的相关索引,而且过多的索引也会浪费硬盘空间。

     

    索引的分类:

    索引就类似于中文字典前面的目录,按照拼音或部首都可以很快的定位到所要查找的字。

    唯一索引(UNIQUE):每一行的索引值都是唯一的(创建了唯一约束,系统将自动创建唯一索引)

    主键索引:当创建表时指定的主键列,会自动创建主键索引,并且拥有唯一的特性。

    聚集索引(CLUSTERED):聚集索引就相当于使用字典的拼音查找,因为聚集索引存储记录是物理上连续存在的,即拼音 a 过了后面肯定是 b 一样。

    非聚集索引(NONCLUSTERED):非聚集索引就相当于使用字典的部首查找,非聚集索引是逻辑上的连续,物理存储并不连续。

    PS:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

     

    什么情况下使用索引:

    语法:

    CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name   
        ON <object> ( column_name [ ASC | DESC ] [ ,...n ] )   
        [ WITH <backward_compatible_index_option> [ ,...n ] ]  
        [ ON { filegroup_name | "default" } ]  
      
    <object> ::=  
    {  
        [ database_name. [ owner_name ] . | owner_name. ]   
        table_or_view_name  
    }  
      
    <backward_compatible_index_option> ::=  
    {   
        PAD_INDEX  
      | FILLFACTOR = fillfactor  
      | SORT_IN_TEMPDB  
      | IGNORE_DUP_KEY  
      | STATISTICS_NORECOMPUTE   
      | DROP_EXISTING   
    }

    参数:

    UNIQUE:为表或视图创建唯一索引。 唯一索引不允许两行具有相同的索引键值。 视图的聚集索引必须唯一。如果要建唯一索引的列有重复值,必须先删除重复值。

    CLUSTERED:表示指定创建的索引为聚集索引。创建索引时,键值的逻辑顺序决定表中对应行的物理顺序。 聚集索引的底层(或称叶级别)包含该表的实际数据行。

    NONCLUSTERED:表示指定创建的索引为非聚集索引。创建一个指定表的逻辑排序的索引。 对于非聚集索引,数据行的物理排序独立于索引排序。

    index_name:表示指定所创建的索引的名称。

    database_name:表示指定的数据库的名称。

    owner_name:表示指定所有者。

    table:表示指定创建索引的表的名称。

    view:表示指定创建索引的视图的名称。

    column:索引所基于的一列或多列。 指定两个或多个列名,可为指定列的组合值创建组合索引。

    [ ASC | DESC]:表示指定特定索引列的升序或降序排序方向。 默认值为 ASC。

    on filegroup_name:为指定文件组创建指定索引。 如果未指定位置且表或视图尚未分区,则索引将与基础表或视图使用相同的文件组。 该文件组必须已存在。

    on default:为默认文件组创建指定索引。

    PAD_INDEX = {ON |OFF }:指定是否索引填充。默认为 OFF。

      ON 通过指定的可用空间的百分比fillfactor应用于索引中间级别页。

      OFF 或 fillfactor 未指定,考虑到中间级页上的键集,将中间级页填充到接近其容量的程度,以留出足够的空间,使之至少能够容纳索引的最大的一行。

      PAD_INDEX 选项只有在指定了 FILLFACTOR 时才有用,因为 PAD_INDEX 使用由 FILLFACTOR 指定的百分比。

    FILLFACTOR = fillfactor:用于指定在创建索引时,每个索引页的数据占索引页大小的百分比,fillfactor 的值为1到100。

    SORT_IN_TEMPDB = {ON |OFF }:用于指定创建索引时的中间排序结果将存储在 tempdb 数据库中。 默认为 OFF。

      ON 用于生成索引的中间排序结果存储在tempdb。 这可能会降低仅当创建索引所需的时间tempdb位于不同的与用户数据库的磁盘集。 

      OFF 中间排序结果与索引存储在同一数据库中。

    IGNORE_DUP_KEY = {ON |OFF }:指定在插入操作尝试向唯一索引插入重复键值时的错误响应。默认为 OFF。

      ON 向唯一索引插入重复键值时将出现警告消息。 只有违反唯一性约束的行才会失败。

      OFF 向唯一索引插入重复键值时将出现错误消息。 整个 INSERT 操作将被回滚。

    STATISTICS_NORECOMPUTE = {ON |OFF}:用于指定过期的索引统计是否自动重新计算。 默认为 OFF。

      ON 不会自动重新计算过时的统计信息。

      OFF 启用统计信息自动更新功能。

    DROP_EXISTING = {ON |OFF }:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。

      ON 指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。

      OFF 指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。

    ONLINE = {ON |OFF}:表示建立索引时是否允许正常访问,即是否对表进行锁定。默认为 OFF。

      ON 它将强制表对于一般的访问保持有效,并且不创建任何阻止用户使用索引和/表的锁。

      OFF 对索引操作将对表进行表锁,以便对表进行完全和有效的访问。

    例子:

    创建唯一聚集索引:

    -- 创建唯一聚集索引
    create unique clustered        --表示创建唯一聚集索引
    index UQ_Clu_StuNo        --索引名称
    on Student(S_StuNo)        --数据表名称(建立索引的列名)
    with 
    (
        pad_index=on,    --表示使用填充
        fillfactor=50,    --表示填充因子为50%
        ignore_dup_key=on,    --表示向唯一索引插入重复值会忽略重复值
        statistics_norecompute=off    --表示启用统计信息自动更新功能
    )

    创建唯一非聚集索引:

    -- 创建唯一非聚集索引
    create unique nonclustered        --表示创建唯一非聚集索引
    index UQ_NonClu_StuNo        --索引名称
    on Student(S_StuNo)        --数据表名称(建立索引的列名)
    with 
    (
        pad_index=on,    --表示使用填充
        fillfactor=50,    --表示填充因子为50%
        ignore_dup_key=on,    --表示向唯一索引插入重复值会忽略重复值
        statistics_norecompute=off    --表示启用统计信息自动更新功能
    )
    --创建聚集索引
    create clustered index Clu_Index
    on Student(S_StuNo)
    with (drop_existing=on)    
    
    --创建非聚集索引
    create nonclustered index NonClu_Index
    on Student(S_StuNo)
    with (drop_existing=on)    
    
    --创建唯一索引
    create unique index NonClu_Index
    on Student(S_StuNo)
    with (drop_existing=on)

    PS:当 create index 时,如果未指定 clustered 和 nonclustered,那么默认为 nonclustered。

    创建非聚集复合索引:

    --创建非聚集复合索引
    create nonclustered index Index_StuNo_SName
    on Student(S_StuNo,S_Name)
    with(drop_existing=on)
    --创建非聚集复合索引,未指定默认为非聚集索引
    create index Index_StuNo_SName
    on Student(S_StuNo,S_Name)
    with(drop_existing=on)

    在 CREATE INDEX 语句中使用 INCLUDE 子句,可以在创建索引时定义包含的非键列(即覆盖索引),其语法结构如下:

    CREATE NONCLUSTERED INDEX 索引名
    ON { 表名| 视图名 } ( 列名 [ ASC | DESC ] [ ,...n ] )
    INCLUDE (<列名1>, <列名2>, [,… n])
    
    
    --创建非聚集覆盖索引
    create nonclustered index NonClu_Index
    on Student(S_StuNo)
    include (S_Name,S_Height)
    with(drop_existing=on)
    
    --创建非聚集覆盖索引,未指定默认为非聚集索引
    create index NonClu_Index
    on Student(S_StuNo)
    include (S_Name,S_Height)
    with(drop_existing=on)

    PS:聚集索引不能创建包含非键列的索引。

    创建筛选索引:

    --创建非聚集筛选索引
    create nonclustered index Index_StuNo_SName
    on Student(S_StuNo)
    where S_StuNo >= 001 and S_StuNo <= 020
    with(drop_existing=on)
    
    --创建非聚集筛选索引,未指定默认为非聚集索引
    create index Index_StuNo_SName
    on Student(S_StuNo)
    where S_StuNo >= 001 and S_StuNo <= 020
    with(drop_existing=on)

    修改索引:

    --修改索引语法
    ALTER INDEX { 索引名| ALL }
    ON <表名|视图名>
    { REBUILD  | DISABLE  | REORGANIZE }[ ; ]

    REBUILD:表示指定重新生成索引。

    DISABLE:表示指定将索引标记为已禁用。

    REORGANIZE:表示指定将重新组织的索引叶级。

    --禁用名为 NonClu_Index 的索引
    alter index NonClu_Index on Student disable

    删除和查看索引:

    --查看指定表 Student 中的索引
    exec sp_helpindex Student    
    
    --删除指定表 Student 中名为 Index_StuNo_SName 的索引
    drop index Student.Index_StuNo_SName
    
    --检查表 Student 中索引 UQ_S_StuNo 的碎片信息
    dbcc showcontig(Student,UQ_S_StuNo)
    
    --整理 Test 数据库中表 Student 的索引 UQ_S_StuNo 的碎片
    dbcc indexdefrag(Test,Student,UQ_S_StuNo)
    
    --更新表 Student 中的全部索引的统计信息
    update statistics Student

    索引定义原则:

    避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。

    在条件表达式中经常用到的、不同值较多的列上建立索引,在不同值少的列上不要建立索引。

    在频繁进行排序或分组(即进行 GROUP BY 或 ORDER BY 操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。

    在选择索引键时,尽可能采用小数据类型的列作为键以使每个索引页能容纳尽可能多的索引键和指针,通过这种方式,可使一个查询必需遍历的索引页面降低到最小,此外,尽可能的使用整数做为键值,因为整数的访问速度最快。

     

    来源: https://www.cnblogs.com/jett010/p/9071030.html

     

    其他资料:

    聚集索引和非聚集索引(转)

     

    展开全文
  • ORACLE创建索引

    千次阅读 2017-11-24 11:54:00
    适当的使用索引可以提高数据检索速度,可以给经常需要进行查询的字段创建索引   oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引   创建索引的标准语法: ...

    1. CREATE INDEX命令语法:

     

    CREATE INDEX
    CREATE [unique] INDEX [user.]index
    ON [user.]table (column [ASC | DESC] [,column
    [ASC | DESC] ] ... )
    [CLUSTER [scheam.]cluster]
    [INITRANS n]
    [MAXTRANS n]
    [PCTFREE n]
    [STORAGE storage]
    [TABLESPACE tablespace]
    [NO SORT]
    Advanced

     

    其中:
       schema ORACLE模式,缺省即为当前帐户
       index 索引名
       table 创建索引的基表名
       column 基表中的列名,一个索引最多有16列,long列、long raw
                  列不能建索引列
       DESC、ASC 缺省为ASC即升序排序
       CLUSTER 指定一个聚簇(Hash cluster不能建索引)
       INITRANS、MAXTRANS 指定初始和最大事务入口数
       Tablespace 表空间名
       STORAGE 存储参数,同create table 中的storage.
       PCTFREE 索引数据块空闲空间的百分比(不能指定pctused)
       NOSORT 不(能)排序(存储时就已按升序,所以指出不再排序)

     
     

    2.建立索引的目的:

     

    建立索引的目的是:
    l 提高对表的查询速度;
    l 对表有关列的取值进行检查。

     

    但是,对表进行insert,update,delete处理时,由于要表的存放位置记录到索引项中而会降低一些速度。
    注意:一个基表不能建太多的索引;
          空值不能被索引
          只有唯一索引才真正提高速度,一般的索引只能提高30%左右。

     

       Create index ename_in on emp (ename,sal);

     

    例1:商场的商品库表结构如下,我们为该表的商品代码建立一唯一索引,使得在前台POS收款时提高查询速度。
    Create table good(good_id number(8) not null,/* 商品条码 */
                       Good_desc varchar2(40), /* 商品描述 */
                       Unit_cost number(10,2) /* 单价 */
                       Good_unit varchar2(6), /* 单位 */
                       Unit_pric number(10,2) /* 零售价 */
                       );

     

    注:提高查询速度的方法还有在表上建立主键,主键与唯一索引的差别
    在于唯一索引可以空,主键为非空,比如:

     

    Create table good(good_id number(8) primary key,
                        Good_desc Varchar2(40),
                        Unit_cost number(10,2),
                        Good_unit char(6),
                        Unit_pric number(10,2)
                       );

     

    §3.5.2 修改索引
    对于较早的Oracle版本,修改索引的主要任务是修改已存在索引的存储参数适应增长的需要或者重新建立索引。而Oracle8I及以后的版本,可以对无用的空间进行合并。这些的工作主要是由管理员来完成。

     

    简要语法结构如下,更详细的语法图见电子文档《Oracle8i Reference 》 中的 Alter index.

     

    ALTER [UNIQUE] INDEX [user.]index
    [INITRANS n]
    [MAXTRANS n] 
    REBUILD 
    [STORAGE n]

     

    其中:
    REBUILD 是 根据原来的索引结构重新建立索引,实际是删除原来的索引后再重新建立。

     

    提示:DBA经常用 REBUILD 来重建索引可以减少硬盘碎片和提高应用系统的性能。

     

    例:
    alter index pk_detno rebuild storage(initial 1m next 512k);

     

    ALTER INDEX emp_ix REBUILD REVERSE;

     
     

    Oracle8i 的新功能可以对索引的无用空间进行合并,它由下面命令完成:

     

    ALTER INDEX . . . COALESCE;

     

    例如:

     

    ALTER INDEX ename_idx COALESCE;

     

    §3.5.3 删除索引
    当不需要时可以将索引删除以释放出硬盘空间。命令如下:

     

    DROP INDEX [schema.]indexname

     

    例如:

     

    sql> drop index pk_dept;

     

    注:当表结构被删除时,有其相关的所有索引也随之被删除。

     

    §3.6 新索引类型
    Oracle8i为了性能优化而提供新的创建新类型的索引。这些新索引在下面介绍:

     

    §3.6.1 基于函数的索引
    基于函数的索引就是存储预先计算好的函数或表达式值的索引。这些表达式可以是算术运算表达式、SQL或PL/SQL函数、C调用等。值得注意的是,一般用户要创建函数索引,必须具有GLOBAL QUERY REWRITE和CREATE ANY INDEX权限。否则不能创建函数索引,看下面例子:

     

    例1:为EMP表的ename 列建立大写转换函数的索引idx :

     

    CREATE INDEX idx ON emp ( UPPER(ename));

     

    这样就可以在查询语句来使用:

     

    SELECT * FROM EMP WHERE UPPER(ename) LIKE ‘JOH%’;

     

    例2:为emp 的工资和奖金之和建立索引:
    1) 查看emp 的表结构:
    SQL> desc emp
     Name Null? Type
     ----------------------------------------- -------- ------------------
     EMPNO NOT NULL NUMBER(4)
     ENAME VARCHAR2(10)
     JOB VARCHAR2(9)
     MGR NUMBER(4)
     HIREDATE DATE
     SAL NUMBER(7,2)
     COMM NUMBER(7,2)
     DEPTNO NUMBER(2)

     

    2)没有授权就创建函数索引的提示:

     

    SQL> create index sal_comm on emp ( (sal+comm)*12, sal,comm)
     2 tablespace users storage(initial 64k next 64k pctincrease 0);
    create index sal_comm on emp ( (sal+comm)*12, sal,comm)
                                              *
    ERROR at line 1:
    ORA-01031: insufficient privileges

     

    3) 连接到DBA帐户并授权:

     

    SQL> connect sys/sys@ora816
    Connected.
    SQL> grant GLOBAL QUERY REWRITE to scott;

     

    Grant succeeded.

     

    SQL> grant CREATE ANY INDEX to scott;

     

    Grant succeeded.

     
     

    4)在连接到scott帐户,创建基于函数的索引:

     

    SQL> connect scott/tiger@ora816
    Connected.
    SQL> create index sal_comm on emp ( (sal+comm)*12, sal,comm)
     2 tablespace users storage(initial 64k next 64k pctincrease 0);

     

    Index created.

     

    1)在查询中使用函数索引:

     

    SQL> select ename,sal,comm from emp where (sal+comm)*12 >5000;

     

    ENAME SAL COMM
    ---------------------- ---------------- ----------------
    ALLEN 1600 300
    WARD 1250 500
    MARTIN 1250 1400
    TURNER 1500 0
        赵元杰 1234.5 54321

     

    §3.6.2 反向键索引
    反向键索引通过反向键保持索引的所有叶子键上的插入分布。有时,可用反向键索引来避免不平衡的索引。对于反向键索引可以进行下面操作:
    l 通过在ALTER INDEX命令后加REBUILD NOREVERSE或REBUILD REVERSE子句来使索引边为反向键索引或普通索引;
    l 采用范围扫描的查询不能使用反向键索引;
    l 位图索引不能反向;
    l 索引编排表不能反向。

     

    例1:创建一个反向键索引:
    CREATE INDEX i ON t (a,b,c) REVERSE;

     

    例2:使一个索引变为反向键索引:
    ALTER INDEX i REBUILD NOREVERSE;

     
     

    §3.6.3 索引组织表
    与普通的索引不一样,索引组织表(Index_Organized Table)是根据表来存储数据,即将索引和表存储在一起。这样的索引结构表(Index_organized table—IOT)的特点是:对表数据的改变,如插入一新行、删除某行都引起索引的更新。
    索引组织表就象带一个或多个列所有的普通表一样,但索引组织表在B-树索引结构的叶节点上存储行数据。通过在索引结构中存储数据,索引组织表减少了总的存储量,此外,索引组织表也改善访问性能。
    由于表中的行与B_树索引存放在一起,每个行都没有ROWID,而是用主键来标识。但是Oracle会“猜”这些行的位置并为每个行分配逻辑的ROWID。此外,你可以为这样的表建立第二个索引。

     

    创建索引结构表也是用CREATE TABLE 命令加ORGANIZATION INDEX关键字来实现。但是,这样的表在创建完后,你还必须为该表建立一个主键。

     

    例子:
    CREATE TABLE IOT_EXPAMPLE
    (
    Pk_col1 number(4),
    Pk_col2 varchar2(10),
    Non_pk_col1 varchar2(40),
    Non_pk_col2 date,
    CONSTRAINT pk_iot PRIMARY KEY
                     ( pk_col1, pk_col2)
    )
    ORGANIZATION INDEX
    TABLESPACE INDEX
    STORAGE( INITIAL 1M NEXT 512K PCTINCREASE 0 );

     
     
     

    索引组织表有些限制:
    l 不能使用唯一约束;
    l 必须具有一个主键;
    l 不能建立簇;
    l 不能包含LONG类型列;
    l 不支持分布和复制。
    提示:如果建立了索引组织表,则会在DBA_TABLES中的IOT_TYPE和IOT_NAME列上记录有索引组织表的信息。

     

    例1.修改索引结构表 docindex 的索引段的INITRANS参数:

     

    ALTER TABLE docindex INITRANS 4;

     

    例2.下面语句加一个的溢出数据段到索引组织表 docindex中:

     

    ALTER TABLE docindex ADD OVERFLOW;

     

    例3.下面语句为索引组织表 docindex的溢出数据段修改INITRANS参数:

     

    ALTER TABLE docindex OVERFLOW INITRANS 4;

     
     
     

    ============================================================================================================
    适当的使用索引可以提高数据检索速度,可以给经常需要进行查询的字段创建索引

     

    oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引

     

    创建索引的标准语法:

     

    CREATE INDEX 索引名 ON 表名 (列名) 

     

         TABLESPACE 表空间名; 

     

    创建唯一索引:

     

    CREATE unique INDEX 索引名 ON 表名 (列名) 

     

         TABLESPACE 表空间名; 

     

    创建组合索引:

     

    CREATE INDEX 索引名 ON 表名 (列名1,列名2) 

     

         TABLESPACE 表空间名; 

     

    创建反向键索引:

     

    CREATE INDEX 索引名 ON 表名 (列名) reverse

     

         TABLESPACE 表空间名; 

     
     
     

    查看文章    
    oracle 查看索引类别以及查看索引字段被引用的字段方法2008年01月04日 星期五 13:20查看索引个数和类别

     

    select * from user_indexes where table='表名' ;

     

    查看索引被索引的字段

     
     

    SQL>select * from user_ind_columns where index_name=upper('&index_name');

     

    PS:

     

    查看某表的约束条件

     
     

    SQL>select constraint_name, constraint_type,search_condition, r_constraint_name 
    from user_constraints where table_name = upper('&table_name'); 

     

    SQL>select c.constraint_name,c.constraint_type,cc.column_name 
    from user_constraints c,user_cons_columns cc 
    where c.owner = upper('&table_owner') and c.table_name = upper('&table_name') 
    and c.owner = cc.owner and c.constraint_name = cc.constraint_name 
    order by cc.position;

     

    查看视图的名称

     
     

    SQL>select view_name from user_views;

     
    展开全文
  • 数据库索引什么什么优缺点

    千次阅读 2018-11-28 14:48:44
    而我们使用索引目的就是,加快表中的查找和排序。索引的种类分为普通索引、唯一索引、聚集索引、主键索引、全文索引等。 唯一索引:在创建唯一索引时不能具有相同的索引值。 主键索引:在我们给一个字段设置主键...
  • SQL server创建索引

    千次阅读 2016-07-06 17:27:00
    使用T-SQL语句创建索引的语法: CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]   INDEX index_name  ON table_name (column_name…)  [WITH FILLFACTOR=x]  UNIQUE表示唯一索引,可选  CLUSTERED、...
  • 索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。本节将详细讲解索引的含义、作用和优缺点。 通过索引,查询数据时不用读完记录的所有信息,而只是查询...
  • 1. 什么是索引索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引中包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(BTree)中,使SQL可以快速有效地...
  • JanusGraph 创建索引步骤

    千次阅读 2019-01-29 11:44:08
    这篇随笔主要是记录创建索引过程中踩过的坑。   索引介绍  与mysql创建索引不同,JanusGraph的索引有一套生命周期,如下图所示:    我们的目标是从&lt;create&gt;索引开始,通过...
  • 2.频繁作为查询条件的字段应该创建索引; 3.查询中与其他表有关联的字段,例如外键关系; 4.频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件; 5.where条件里用不到的...
  • 如何创建合适的索引主要创建多列索引还是单列索引?  [复制链接] w_z_y 论坛徽章: 0 电梯直达 1#  发表于 2004-12-8 15:21 | 只看该作者 
  • 什么创建索引

    千次阅读 2010-06-24 22:01:00
    第二, 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三, 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四, 在使用分组和排序子句进行数据...
  • 创建索引时的注意事项

    千次阅读 2018-03-09 18:28:10
    1、始终包含聚集索引当表中不包含聚集索引时,表中的数据是无序的,这会降低数据检索效率。即使通过索引缩小了数据检索的范围,但由于数据本身是无序的,当从表中提取实际数据时,会产生频繁的定位问题,这也使得SQL...
  • 以前对数据库索引只有一种模糊的认识,始终有一种把它彻底搞清楚的冲动,感谢百度~ 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。    数据库索引好比是一本...
  • oracle引入索引目的

    千次阅读 2016-04-15 11:56:46
    Oracle索引索引关键字的顺序存放记录。 在索引记录中存有索引关键字和指向表中真正数据的指针(地址)。 由于Oracle索引中只存索引关键字和指向表中真正数据的指针。因此规模比真正存有数据的表的规模小得多,...
  • [搜索]ElasticSearch Java Api(一) -创建索引

    万次阅读 多人点赞 2016-06-19 23:25:52
    创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法: 1.1手写方式生成 String json = "{" + "\"user\":\"kimchy\"," + "\"...
  • // Inplace创建索引第一阶段(主要阶段)     handler0alter.cc::add_index();     …     // 创建索引数据字典     row0merge.c::row_merge_create_index();     index   = dict_mem_index_create();   ...
  • 创建索引的优点和缺点

    千次阅读 2016-12-28 10:44:26
    什么创建索引呢? 这是因为,创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 ...
  • 必须考虑在哪些字段上创建索引和创建什么类型的索引 。 【1】选择唯一性索引 唯一性索引的值是唯一的, 可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。 为该字段建立唯性索引...
  • 几乎所有的小伙伴都可以随口说几句关于创建索引的优缺点,也知道什么时候创建索引能够提高我们的查询性能,什么时候索引会更新,但是你有没有注意到,即使你设置了索引,有些时候索引他是不会生效的!这不仅考察了...
  • 数据库使用索引的优点是提高查询效率,缺点是对于时间和资源消耗较大
  • 以下情况适合创建索引 1、在经常需要搜索的列上,可以加快搜索的速度。 2、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。 3、在经常用于连接两张表的列上,这些列主要是一些外键,可以加快连接的...
  • ElasticSearch JAVA API官网文档:...创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法: 1.1手写方式生成 String
  • 数据库索引的原理到底是什么

    万次阅读 2017-11-12 12:06:13
    建立数据库的目的是管理大量数据,而建立索引目的就是提高数据检索效率,改善数据库工作性能,提高数据访问速度。 对于索引,我们要知其然,更要知其所以然,关键在于认识索引的工作原理,才能更好的管理索引。为...
  • 什么是索引

    千次阅读 2019-09-30 01:26:35
    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引...如果作为搜索条件的列上已经创建索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描...
  • 索引操作 1)创建索引 在Elasticsearch中创建索引就等同于创建数据库 向ES服务器发出PUT方式的请求:localhost:9200/shopping,就是创建索引。 如果重复添加索引会返回错误信息。 2)查看所有的索引 向ES服务器发送...
  • 目录1、什么是索引?1.1、B+Tree结构了解一下1.2、索引到底有哪些1.3、索引是把双刃剑2、索引优化2.1、其中最重要的就是这个explain关键字2.2、使用索引的注意事项2.3、导致索引失效的原因哪些(索引优化方案)? 1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,105
精华内容 96,042
关键字:

创建索引的主要目的是什么