精华内容
下载资源
问答
  • 信息检索资料索引

    千次阅读 2009-07-09 06:30:00
    斯坦福大学,信息实验室公开论文:http://infolab.stanford.edu/pub/ 斯坦福大学,数据库系统实现课程主页,包含课件等相关资料:http://infolab.stanford.edu/~ullman/dbsi.html Introduction to Information ...

    斯坦福大学,信息实验室公开论文:

    http://infolab.stanford.edu/pub/

     

    斯坦福大学,数据库系统实现课程主页,包含课件等相关资料:

    http://infolab.stanford.edu/~ullman/dbsi.html

     

    Introduction to Information Retrieval电子书和相关资料:

    http://www-csli.stanford.edu/~hinrich/information-retrieval-book.html

     

    The Geometry of Information Retrieval电子书下载:

    http://rs61cg2.rapidshare.com/files/73699957/942482/The_Geometry_of_Information_Retrieval.pdf

     

    Foundations of Statistical Natural Language Processing电子书下载:

    http://xbean.cs.ccu.edu.tw/~dan/NLP/foundations_of_statistical_natural_language_processing.pdf

     

    北大整理的信息检索资料索引:

    http://sewm.pku.edu.cn/IR-Guide.txt

     

    斯坦福大学信息检索资源汇总:

    http://www-csli.stanford.edu/~hinrich/information-retrieval.html

     

    yahoo research publications:

    http://research.yahoo.com/publication

     

    Modeling the Internet and the Web  【2003年出版的一本书】

    http://ibook.ics.uci.edu/slides.html

     

    展开全文
  • 索引键值的逻辑顺序与索引所服务的表中相应行的物理顺序相同的索引,被称为聚集索引,反之为非聚集索引索引一般使用二叉树排序索引键值的,聚集索引索引值是直接指向数据表对应元组的,而非聚集索引索引值仍会...

    聚集索引[编辑]

    索引键值的逻辑顺序与索引所服务的表中相应行的物理顺序相同的索引,被称为聚集索引,反之为非聚集索引,索引一般使用二叉树排序索引键值的,聚集索引的索引值是直接指向数据表对应元组的,而非聚集索引的索引值仍会指向下一个索引数据块,并不直接指向元组,因为还有一层索引进行重定向,所以非聚集索引可以拥有不同的键值排序而拥有多个不同的索引。而聚集索引因为与表的元组物理顺序一一对应,所以只有一种排序,即一个数据表只有一个聚集索引。

    File:非聚集索引.JPG
    非聚集索引的索引排序与表物理排序不一致,而且其索引值是指向下个索引的数据块
    File:聚集索引.jpg
    聚集索引的索引排序与表物理排序一致,而且其索引值是直接指向键值所在的表数据块的元组上
    以上是维基百科的解释,很晕。

    具体的理解:

    1.概念
             索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度(简单理解)。
             索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单(深刻理解)。

              按照存储方式分为:聚集与非聚集索引(需要重视和区别的概念,后面详解)
              按照维护与管理索引角度分为:唯一索引、复合索引和系统自动创建的索引(相对简单,如下解释:)
             1).唯一索引:惟一索引可以确保索引列不包含重复的值.
             可以用多个列,但是索引可以确保索引列 中每个值组合都是唯一的,
             即下面的姓不能有重复,同时名也不能有重复:
                                                 姓      名 
                                                 李      二
                                                 张      三
                                                 王      五
              语法: create unique index idxempid on emp(姓,名)

              2).复合索引:如果在两上以上的列 上创建一个索引,则称为复合索引。
              那么,不可能有两行的姓和名是重复的,即上面的表没有两行其姓和名的组合是一样的。
              语法: create index indxfullname on emp(姓,名)

              3).系统自建的索引:在使用T_sql语句创建表的时候使用PRIMARY KEY或UNIQUE约束时,会在表上
              自动创建一个惟一索引,自动创建的索引是无法删除的。

               语法:
                       create table ABC
                       ( empID int PRIMARY KEY,
                          firstname varchar(50) UNIQUE,
                          lastname  varchar(50) UNIQUE,
                         )    /*这样的结果就出来了三个索引,但只有一个聚集索引empID*/

             索引的结构是由:根节点--->非叶节点--->非叶节点--->叶节点(注意索引在数据库引擎中所用的
             内部数据结构一般是B+树,参考后文)

             

     聚集索引和非聚集索引——   
             用一个现实中的例子说明以助理解。我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。 
      我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

         (索引键值的逻辑顺序与索引所服务的表中相应行的物理顺序相同的索引

      如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。
            我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

             2.性质及使用方法
             1)聚集索引: 表中存储的数据按照索引的顺序存储,检索效率比普通索引高,索引占用硬盘

              存储空间小(1%左右),但对数据新增/修改/删除的速度影响比较大(降低)。系统会进行索引重建。
              特点:
                      (1) 无索引,数据无序
                      (2) 有索引,数据与索引同序 
                      (3) 数据会根据索引键的顺序重新排列数据
                      (4) 一个表只能有一个索引
                      (5) 叶节点的指针指向的数据也在同一位置存储
             语法:create CLUSTERED INDEX idxempID ON emp(empID)

             2)非聚集索引 :不影响表中的数据存储顺序,检索效率比聚集索引低,索引占用硬盘存储
             空间大(30%~40%),对数据新增/修改/删除的影响很少。

             特点:
                   (1) 一个表可以最多可以创建249个非聚集索引
                   (2) 先建聚集索引才能创建非聚集索引
                   (3) 非聚集索引数据与索引不同序
                   (4) 数据与非聚集索引在不同位置
                   (5) 非聚集索引在叶节点上存储,在叶节点上有一个“指针”直接指向要查询的数据区域
                   (6) 数据不会根据非聚集索引键的顺序重新排列数据
             语法:create NONCLUSTERED INDEX idximpID ON emp(empID)
             
             创建索引的方法:
             1)企业管理器中
                   (1)右击某个表,所有任务---管理索引,打开管理索引,单击“新建”就可以创建索引
                   (2)在设计表中进行设计表,管理索引/键
                   (3)在关系图中,添加表后右击关系图中的某个表,就有“索引/键”
                   (4)通过向导,数据库---创建索引向导
                   (5)通过T-SQL语句
             2)能过“索引优化向导”来优化索引的向导,通过它可以决定选择哪些列做为索引列
             
             何时应使用聚集索引或非聚集索引

    动作描述

    使用聚集索引

    使用非聚集索引

    列经常被分组排序

    返回某范围内的数据

    不应

    一个或极少不同值

    不应

    不应

    小数目的不同值

    不应

    大数目的不同值

    不应

    频繁更新的列

    不应

    外键列

    主键列

    频繁修改索引列

    不应


             3.数据库引擎中索引的内部结构
             有必要先说明一下数据库引擎,
             这部分是较深的内容,需要有一定的数据库理论知识和数据结构与算法知识,数据结构和算法告诉我们,对索引关键字进行快速查找时要使用树形数据结构,在数据库引擎中,索引通常用B+树来表示,google发现这方面的文章较少,后面找到相关详细资料会补充。

             4.主键、索引、聚集索引和非聚集索引
             1)主键   (PK)   
                    唯一标识表中的所有行的一个列或一组列。主键不允许空值。不能存在具有相同的主键值的两个
             行,因此主键值总是唯一标识单个行。表中可以有不止一个键唯一标识行,每个键都称作候选键。只有
             一个候选键可以选作表的主键,所有其它候选键称作备用键。尽管表不要求具有主键,但定义主键是很
             好的做法。   在规范化的表中,每行中的所有数据值都完全依赖于主键。例如,在以   EmployeeID   作为
             主键的规范化的   employee   表中,所有列都应包含与某个特定职员相关的数据。该表不具有   
             DepartmentName 列,因为部门的名称依赖于部门   ID,而不是职员   ID。   

             2)索引   
                   关系数据库中基于键值提供对表的行中数据的快速访问的数据库对象。索引还可以在表的行上强制唯
             一性。SQL   Server   支持聚集索引和非聚集索引。对表的主键自动进行索引。在全文搜索中,全文索引
             存储关于重要词和这些词在给定列中的位置的信息。   
                   如果某列有多行包含   NULL   值,则不能在该列上创建唯一索引。同样,如果列的组合中有多行包
             含   NULL   值,则不能在多个列上创建唯一索引。在创建索引时,这些被视为重复的值。   

            3)聚集索引   
                   在创建聚集索引时,将会对表进行复制,对表中的数据进行排序,然后删除原始的表。因此,数据库
             上必须有足够的空闲空间,以容纳数据复本。默认情况下,表中的数据在创建索引时排序。但是,如果
             因聚集索引已经存在,且正在使用同一名称和列重新创建,而数据已经排序,则会重建索引,而不是从
             头创建该索引,以自动跳过排序操作。重建操作会检查行是否在生成索引时进行了排序。如果有任何行
             排序不正确,即会取消操作,不创建索引。   

             4)非聚集索引   
                   非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向
             数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚
             集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。 

             打开设计表界面里面有个钥匙就是主键的意思,当你声明一列为主键的时候数据库实际上就是生成一个
    唯一的索引,查询优化器实际上是根据列上有没有唯一索引来保证列的唯一性而不是根据列是否被声明为主键。   
             聚集索引一个表只有一个,实际上它的叶子节点就是数据页,比非聚集索引速度快,占用的空间小,大概只有表的1%左右。如果在声明的时候没有选择UNIQUE选项,则在插入数据的时候会自动生成一个唯一标示符。   
             非聚集索引一个表可以有多个,一个3层的非聚簇索引要查询6次才可以找到真实数据,因为其叶子节点并不是真实数据,而是标识(如果表上有聚集索引则为聚集索引,如没有,则为实际数据的页号),非聚集索引通常占用空间比较大,表的30-40%。 


    聚集索引用与不用比较

    1 用聚合索引比用不是聚合索引的主键速度快查询速度快

    2 用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下

    3 使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个

    4 日期列不会因为有分秒的输入而减慢查询速度

    从publish 表中取出第 n 条到第 m 条的记录:
      SELECT TOP m-n+1 *
      FROM publish
      WHERE (id NOT IN (SELECT TOP n-1 id FROM publish) )

    id 为publish 表的关键字

    只所以把“查询优化”和“分页算法”这两个联系不是很大的论题放在一起,就是因为二者都需要一个非常重要的东西――聚集索引

    在前面的讨论中我们已经提到了,聚集索引有两个最大的优势:

    1、以最快的速度缩小查询范围。

    2、以最快的速度进行字段排序。

    第1条多用在查询优化时,而第2条多用在进行分页时的数据排序。
    聚集索引在每个表内又只能建立一个,这使得聚集索引显得更加的重要。

    聚集索引的挑选可以说是实现“查询优化”和“高效分页”的最关键因素。

    聚集索引是如此的重要和珍贵,所以一定要将聚集索引建立在:

    1、您最频繁使用的、用以缩小查询范围的字段上;

    2、您最频繁使用的、需要排序的字段上。


    具体索引优化可查看:
    http://jimshu.blog.51cto.com/3171847/1252420
    http://tommyhu.cn/T-SQL-suoyin/
    等、




    展开全文
  • 大部分情况下的sql优化的场景,都是发生在我们想让我们的sql语句运行的更快一点,这个时候我们往往会采取一些“措施”调整sql的执行路径以便它们能更快的运行结束。...今天我们先从sql优化中的统计信息索引这2个方...

    大部分情况下的sql优化的场景,都是发生在我们想让我们的sql语句运行的更快一点,这个时候我们往往会采取一些“措施”调整sql的执行路径以便它们能更快的运行结束。

    刚入dba行业,常常听到导师和我说的一句话“20%的sql优化技能就能优化80%的sql性能问题”。大部分情况下sql优化并不复杂,而很关键的一步是我们能不能发现问题,然后才能对症下药。今天我们先从sql优化中的统计信息、索引这2个方面来学习了解一下sql。

    对于cbo模式,统计信息极为重要,这是影响sql语句执行的一个重要的因素。对于数据变化量大的数据库,会很容易出现统计信息过旧的问题即系统记录的表信息和实际表的信息不一致。那么优化器在选择最优执行路径的时候就可能选择不合适的执行路径(非最优路径)。所以我们一线运维常常需要定期的收集统计信息。那么问题来了,统计信息收集依据呢?

    既然要收集,那么很多时候我们可以通过dba_tables视图中的LAST_ANALYZED字段看看上一次的收集日期,做个是否有必要做统计收集的预判断。

    sys@RAC>alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
    
    Session altered.    
    
    sys@RAC>select owner,TABLE_NAME,LAST_ANALYZED from dba_tables where table_name='T1';
    
    OWNER                TABLE_NAME           LAST_ANALYZED
    -------------------- -------------------- -------------------
    TEST                 T1                   2017-10-28 15:08:25

    既然有近一年没有收集过统计信息,那么这类表统计信息不准的嫌疑就会很大。

    还有一点就是当我们在看sql执行计划最后有输出dynamic sampling used for thisstatement ,那么说明本次sql执行发生了动态采样。动态采样是指在段(表,索引,分区)没有分析的情况下,为了使CBO 优化器得到足够的信息以保证做出正确的执行计划而发明的一种技术,可以把它看做系统自动收集统计信息的一种手段。当对象没有统计信息时(即没有做分析),动态采样技术可以通过直接从需要分析的对象抽样数据块来抽象出CBO需要的统计信息。

    动态采样需要额外的消耗数据库资源,所以如果SQL执行频率很高,这部分资源的消耗可能对sql执行效率的影响也会很大,这一点需要我们注意,在这样一个环境中,是不宜使用动态采样的。所以为了防止动态采样带来的系统性能的额外消耗,所以我们建议定期对数据库中的缺失或者过旧的统计信息表做定期的统计信息收集。

    在上述两种情况中,我们一般需要收集统计信息。那么,如何收集又是另外一个问题。

    示例:

    BEGIN
    DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'xxxxx',
                                TABNAME => 'SR_PROBLEM_xxxx',
                                PARTNAME=>'P201802',  
                                ESTIMATE_PERCENT => 1,
                                METHOD_OPT => 'FOR ALL COLUMNS SIZE 1',
                                NO_INVALIDATE=> FALSE,
                                FORCE=>TRUE,
                                CASCADE => TRUE,
                                DEGREE  => 10);
    END;
    /

    参数说明:

    · ownname:要分析表的拥有者

    · tabname:要分析的表名

    · partname:分区的名字,只对分区表或分区索引有用

    · estimate_percent:采样行的百分比,取值范围[0.000001,100]

    · method_opt:决定histograms信息是怎样被统计的,method_opt的取值如下(默认值为FOR ALL COLUMNS SIZE AUTO)

    · for columns <list> SIZE <N> |REPEAT | AUTO | SKEWONLY:统计指定列的histograms,N的取值范围[1,254]

    · force:即使表锁住了也收集统计信息

    · cascade:是收集索引的信息,默认为FALSE

    · degree:决定并行度,默认值为null

     

    那么只有上述两种情况需要收集统计信息么?答案显然是否定的。而且统计信息收集的参数丰富,这里也只是示例,够日常场景下使用而已。很多情况下还需要根据实际情况动态调整的。

     

    下面我们看看索引,在大多数场景下合理的使用索引会使sql语句的执行会有指数级的性能提升,但是索引虽然好,但是千万不能过度使用,因为维护索引需要消耗一定的资源的。

    如果一个数据表中存有海量的数据记录,当对表执行指定条件的查询时,常规的查询方法会将所有的记录都读取出来,然后再把读取的每一条记录与查询条件进行对比,最后返回满足条件的记录。这样进行操作的时间开销和I/O开销都很大。对于这种情况,就可以考虑通过建立索引来减小系统开销。

     

    如果要在表中查询指定的记录,在没有索引的情况下,必须遍历整个表,而有了索引之后,只需要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的ROWID快速找到表中对应的记录。形象的描述就是类似字典目录的作用,能快速的查询到相关资料。

    现在我们常用的索引技术按照索引数据的存储方式可以将索引分为B树索引、位图索引、反向键索引和基于函数的索引等;按照索引列的唯一性可以分为唯一索引和非唯一索引;创建唯一性索引还能保证相关列内的数据的唯一性。按照索引列的个数可以分为单列索引和复合索引。

     

    建立和规划一个合理的能提速sql访问效率的索引需注意以下几点:

    1. 索引应该建立在WHERE子句频繁引用列表上,如果在大表上频繁使用某列或某几个列作为条件执行索引操作,并且检索行数低于总行数的15%(经验值),那么可以考虑在这些列上建立组合索引。

    2. 如果经常需要基于某列或者某几个列排序操作,那么应该在这些列上建立索引可以加快数据排序速度。

    3. 限制表的索引个数。索引主要用于加快查询速度,但会降低DML操作的速度。索引越多,DML操作速度越慢,尤其会极大地影响INSERT和DELETE操作的速度。因此,规划索引时,必须仔细权衡查询和DML的需求。

    4. 不适合建立索引的列的特点:很少进行搜索的列上;列取值比较少的列上;blob类型的列上等。

    5. 在创建过程中,千万不要中断,因为会导致oracle数据字典内已经包含了该索引的信息,但是却实际没有为该索引分配段,导致重新建立索引,并且删除索引报错。

     

    |  作者简介

    李誉军,沃趣科技数据库工程师

    主要参与公司产品实施、测试、维护以及优化。

    展开全文
  • 索引

    2013-04-01 08:43:22
    在向大家详细介绍Oracle建表之前,首先让大家了解下Oracle索引,因为好的索引能帮助Oracle数据库更好的检索我们想要的信息。 Oracle索引逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引...

    在向大家详细介绍Oracle建表之前,首先让大家了解下Oracle索引,因为好的索引能帮助Oracle数据库更好的检索我们想要的信息。

    Oracle索引逻辑上:
    Single column 单行索引
    Concatenated 多行索引
    Unique 唯一索引
    NonUnique 非唯一索引
    Function-based函数索引
    Domain 域索引

    Oracle索引物理上:
    Partitioned 分区索引
    NonPartitioned 非分区索引
    B-tree:
    Normal 正常型B树
    Rever Key 反转型B树
    Bitmap 位图索引

    Oracle索引结构:
    B-tree:
    适合与大量的增、删、改(OLTP);
    不能用包含OR操作符的查询;
    适合高基数的列(唯一值多)
    典型的树状结构;
    每个结点都是数据块;
    大多都是物理上一层、两层或三层不定,逻辑上三层;
    叶子块数据是排序的,从左向右递增;
    在分支块和根块中放的是索引的范围;
    Bitmap:
    适合与决策支持系统;
    做UPDATE代价非常高;
    非常适合OR操作符的查询;
    基数比较少的时候才能建位图索引;
    树型结构:
    索引头
    开始ROWID,结束ROWID(先列出索引的最大范围)
    BITMAP
    每一个BIT对应着一个ROWID,它的值是1还是0,如果是1,表示着BIT对应的ROWID有值;

    B*tree索引的话通常在访问小数据量的情况下比较适用,比如你访问不超过表中数据的5%,当然这只是个相对的比率,适用于一般的情况。bitmap的话在数据仓库中使用较多,用于低基数列,比如性别之类重复值很多的字段,基数越小越好。

     

    一、各种索引介绍:

    1、普通索引

      普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

      2、唯一索引

      普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。

      如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

      3、主索引

      在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。

      4、外键索引

      如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。

      5、复合索引

      索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA,columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。

      6、索引的长度

      在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为BLOB和TEXT类型的数据列创建索引时,必须对索引的长度做出限制;MySQL所允许的最大索引全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。这种检索往往以的形式出现,这对MySQL来说很复杂,如果需要处理的数据量很大,响应时间就会很长。

      这类场合正是全文索引(full-textindex)可以大显身手的地方。在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录。全文索引即可以随数据表一同创建,也可以等日后有必要时再使用下面这条命令添加:

      ALTERTABLEtablenameADDFULLTEXT(column1,column2)有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。下面是这类查询命令的基本语法:

      SELECT*FROMtablename

      WHEREMATCH(column1,column2)AGAINST(‘word1','word2','word3’)

      上面这条命令将把column1和column2字段里有word1、word2和word3的数据记录全部查询出来。

      注解:InnoDB数据表不支持全文索引

    二、索引的创建语句:

    Sql代码 复制代码 收藏代码
    1. 1.添加PRIMARY KEY(主键索引)   
    2. mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )   
    3. 2.添加UNIQUE(唯一索引)   
    4. mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`)    
    5. 3.添加INDEX(普通索引)mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )   
    6. 4.添加FULLTEXT(全文索引)   
    7. mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)   
    8. 5.添加多列索引   
    9. mysql>ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3` )  
    1.添加PRIMARY KEY(主键索引)
    mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
    2.添加UNIQUE(唯一索引)
    mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`) 
    3.添加INDEX(普通索引)mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
    4.添加FULLTEXT(全文索引)
    mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
    5.添加多列索引
    mysql>ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3` )

     三、在哪些地方加索引:

    1、where条件列

    2、排序列或者分组列

    3、主键本身就是索引,无需再次添加

     

    本地索引

    create index idx_adddownloadring_log_time on t_push_adddownloadring_log (downloadtime) local tablespace promotion_index;

    展开全文
  • MySQL普通索引、唯一索引、主索引、外键索引、复合索引、全文索引的使用
  • Lucene学习资料(索引机制) 简介:  Lucene 是一个基于 Java 的全文检索工具包,你可以利用它来为你的应用程序加入索引和检索功能。Lucene 目前是著名的 Apache Jakarta 家族中的一个开源项目,下面...
  • 简介 本篇博客使用Kaggle上的AdultBase数据集:Machine-Learning-Databases 此数据集虽然历史比较悠久,但是数据...使用StringIndexer来对文本信息进行索引 使用IndexToString和StringIndexer的labels值来实现...
  • MySQL 索引

    2020-08-16 16:58:39
    1、参考资料 https://www.bilibili.com/video/BV1QE411A79s 2、索引本质 索引的本质 索引是帮助MySQL高效获取数据的排好序的数据结构 索引的数据结构: 二叉树(树的不平衡导致查找效率超级低) 红黑树(虽然树...
  • lucene学习资料(索引文件格式详解) 本文介绍lucene中segment,.fnm,.fdx,.fdt,.tii,.tis,deletable ,.cfs等格式文件的用途。 1。索引的segment 每个segment代表lucene的一个完整索引段。通常,在一个索引...
  • mysql索引

    2016-08-20 20:09:45
    mysql 联合索引详解索引简介:无特殊情况,提起索引多数指的是B-Tree索引,innodb使用的是B+Tree索引,一种树形结构 索引分类: B-Tree/B+Tree:innodb(只支持B+Tree),primary key、unique key、key 哈希索引:...
  • 最近项目的数据量比较大,使用了大量的索引,也查阅了网上众多的资料,发现网上各位仁兄说的信息都不太负责任,有很多人估计都没有做亲身试验,就发出来了。我最近做了一些试验,把试验结果总结了一下,发出来供自己...
  • sql索引

    千次阅读 2016-07-13 10:24:42
    索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词...
  • mongodb索引

    2015-08-01 21:55:27
    mongodb、索引
  • [2.18已更新] 新手入门,教程资料索引 1. 下载安装和启动方法 2. 新建一个 Hello World 项目 3. 20分钟制作第一个小游戏 4. cocos2d-x 用户上手指南 视频教程系列 1. 产品介绍视频 2. 视频教程第一集...
  • 索引详解

    2015-03-23 10:19:02
    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 注: [1]索引不是万能的! 索引可以加快数据检索操作,但会使数据修改操作
  • 单列索引:一个索引包含一个列,一个表可以有多个单列索引。 组合索引:一个组合索引包含两个或两个以上的列。 聚集索引和辅助索引 接着说,对于Mysql的InnoDB 存储引擎来说,在绝大多数情况下使用 B+ 树建立索引...
  • SQL索引

    千次阅读 2016-04-06 11:47:53
    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱。  1.1 什么是索引?  SQL索引有两种,聚集索引和非聚集索引索引...
  • sql 索引

    2014-11-12 15:22:29
    转的, 写的不错.  现在来介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了...索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 注
  • Mysql 索引

    2015-03-04 15:52:27
    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 注: [1]索引不是万能的! 索引可以加快数据检索操作,但会使数据修改操作变慢。每修改...
  • mysql主键索引、非主键索引、联合索引、覆盖索引、最左匹配、索引下推
  • 信息检索(Information Retrieval,简称IR):从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程 信息检索按照规模分类: 以web搜索为代表...
  • 索引和视图

    2017-09-16 19:23:36
    索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过...
  • domian index域索引和全文索引

    千次阅读 2018-04-25 11:38:37
    索引的介绍域索引(domain index)是为特殊领域设计的索引,比如空间和图像处理。...其中context就是对文本信息进行处理的indextype。CONTEXT使用context创建的domain index就是文本索引。文本索引有3种分析器(l...
  • MySQL 普通索引、唯一索引和主索引

    千次阅读 2017-12-20 13:30:59
     普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = ...)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该...
  • SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱。  1.1 什么是索引?  SQL索引有两种,聚集索引和非聚集索引,...
  • MySQL索引详解之索引的数据结构

    千次阅读 2020-04-21 18:53:22
    很多人对数据库索引可能都是知其然却不知其所以然,对索引没有很深入的理解,在使用过程中也一知半解,导致没有办法准确高效地使用索引,甚至存在不少误用的情况,导致使用索引反而降低了系统的性能。下面就以MySQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,814
精华内容 43,925
关键字:

信息资料索引包括