导航:首页 > 源码编译 > 索引算法

索引算法

发布时间:2022-02-17 02:34:34

Ⅰ 索引方式寻址算法的介绍

王同学 作业要自己做!

Ⅱ 谈谈数据库索引 用自己话说

数据库原索引不仅表现在排序和查找上,更主要的是通过建立合适的索引,还可以防止关键字重复!建立索引的数据库和没有建立索引的数据库在查找速度上,不是一倍两倍的问题,而是几何级倍的问题!所以,不管是什么数据库,至少要建立一个索引.很简的道理,你要在网上搜一个主题,如果你要搜的主题在数据库中不是索引字段,那查找是非常耗时的.但如果你有建立相应的索引,那结果就是天壤之别!

Ⅲ 搜索引擎中索引时怎么实现的

随着互联网的迅猛发展、WEB信息的增加,用户要在信息海洋里查找自己所需的信息,就象大海捞针一样,搜索引擎技术恰好解决了这一难题(它可以为用户提供信息检索服务)。搜索引擎是指互联网上专门提供检索服务的一类网站,这些站点的服务器通过网络搜索软件(例如网络搜索机器人)或网络登录等方式,将Intemet上大量网站的页面信息收集到本地,经过加工处理建立信息数据库和索引数据库,从而对用户提出的各种检索作出响应,提供用户所需的信息或相关指针。用户的检索途径主要包括自由词全文检索、关键词检索、分类检索及其他特殊信息的检索(如企业、人名、电话黄页等)。下面以网络搜索机器人为例来说明搜索引擎技术。
1.网络机器人技术
网络机器人(Robot)又被称作Spider、Worm或Random,核心目的是为获取Intemet上的信息。一般定义为“一个在网络上检索文件且自动跟踪该文件的超文本结构并循环检索被参照的所有文件的软件”。机器人利用主页中的超文本链接遍历WWW,通过U趾引用从一个HT2LIL文档爬行到另一个HTML文档。网上机器人收集到的信息可有多种用途,如建立索引、HIML文件合法性的验证、uRL链接点验证与确认、监控与获取更新信息、站点镜像等。
机器人安在网上爬行,因此需要建立一个URL列表来记录访问的轨迹。它使用超文本,指向其他文档的URL是隐藏在文档中,需要从中分析提取URL,机器人一般都用于生成索引数据库。所有WWW的搜索程序都有如下的工作步骤:
(1)机器人从起始URL列表中取出URL并从网上读取其指向的内容;
(2)从每一个文档中提取某些信息(如关键字)并放入索引数据库中;
(3)从文档中提取指向其他文档的URL,并加入到URL列表中;
(4)重复上述3个步骤,直到再没有新的URL出现或超出了某些限制(时间或磁盘空间);
(5)给索引数据库加上检索接口,向网上用户发布或提供给用户检索。
搜索算法一般有深度优先和广度优先两种基本的搜索策略。机器人以URL列表存取的方式决定搜索策略:先进先出,则形成广度优先搜索,当起始列表包含有大量的WWW服务器地址时,广度优先搜索将产生一个很好的初始结果,但很难深入到服务器中去;先进后出,则形成深度优先搜索,这样能产生较好的文档分布,更容易发现文档的结构,即找到最大数目的交叉引用。也可以采用遍历搜索的方法,就是直接将32位的IP地址变化,逐个搜索整个Intemet。
搜索引擎是一个技术含量很高的网络应用系统。它包括网络技术、数据库技术动标引技术、检索技术、自动分类技术,机器学习等人工智能技术。
2.索引技术
索引技术是搜索引擎的核心技术之一。搜索引擎要对所收集到的信息进行整理、分类、索引以产生索引库,而中文搜索引擎的核心是分词技术。分词技术是利用一定的规则和词库,切分出一个句子中的词,为自动索引做好准备。目前的索引多采用Non—clustered方法,该技术和语言文字的学问有很大的关系,具体有如下几点:
(1)存储语法库,和词汇库配合分出句子中的词汇;
(2)存储词汇库,要同时存储词汇的使用频率和常见搭配方式;
(3)词汇宽,应可划分为不同的专业库,以便于处理专业文献;
(4)对无法分词的句子,把每个字当作词来处理。
索引器生成从关键词到URL的关系索引表。索引表一般使用某种形式的倒排表(1nversionUst),即由索引项查找相应的URL。索引表也要记录索引项在文档中出现的位置,以便检索器计算索引项之间的相邻关系或接近关系,并以特定的数据结构存储在硬盘上。
不同的搜索引擎系统可能采用不尽相同的标引方法。例如Webcrawler利用全文检索技术,对网页中每一个单词进行索引;Lycos只对页名、标题以及最重要的100个注释词等选择性词语进行索引;Infoseek则提供概念检索和词组检索,支持and、or、near、not等布尔运算。检索引擎的索引方法大致可分为自动索引、手工索引和用户登录三类。
3. 检索器与结果处理技术
检索器的主要功能是根据用户输入的关键词在索引器形成的倒排表中进行检索,同时完成页面与检索之间的相关度评价,对将要输出的结果进行排序,并实现某种用户相关性反馈机制。
通过搜索引擎获得的检索结果往往成百上千,为了得到有用的信息,常用的方法是按网页的重要性或相关性给网页评级,进行相关性排序。这里的相关度是指搜索关键字在文档中出现的额度。当额度越高时,则认为该文档的相关程度越高。能见度也是常用的衡量标准之一。一个网页的能见度是指该网页入口超级链接的数目。能见度方法是基于这样的观点:一个网页被其他网页引用得越多,则该网页就越有价值。特别地,一个网页被越重要的网页所引用,则该网页的重要程度也就越高。结果处理技术可归纳为:
(1)按频次排定次序 通常,如果一个页面包含了越多的关键词,其搜索目标的相关性应该越好,这是非常合平常理的解决方案。
(2)按页面被访问度排序 在这种方法中,搜索引擎会记录它所搜索到的页面被访问的频率。人们访问较多的页面通常应该包含比较多的信息,或者有其他吸引入的长处。这种解决方案适合一般的搜索用户,而因为大部分的搜索引擎都不是专业性用户,所以这种方案也比较适合一般搜索引擎使用。
(3)二次检索 进一步净化(比flne)结果,按照一定的条件对搜索结果进行优化,可以再选择类别、相关词进行二次搜索等。
由于目前的搜索引擎还不具备智能,除非知道要查找的文档的标题,否则排列第一的结果未必是“最好”的结果。所以有些文档尽管相关程度高,但并不一定是用户最需要的文档。
搜索引擎技术的行业应用:
搜索引擎的行业应用一般指类似于千瓦通信提供的多种搜索引擎行业与产品应用模式,大体上分为如下几种形式:
1、 政府机关行业应用
n 实时跟踪、采集与业务工作相关的信息来源。
n 全面满足内部工作人员对互联网信息的全局观测需求。
n 及时解决政务外网、政务内网的信息源问题,实现动态发布。
n 快速解决政府主网站对各地级子网站的信息获取需求。
n 全面整合信息,实现政府内部跨地区、跨部门的信息资源共享与有效沟通。
n 节约信息采集的人力、物力、时间,提高办公效率。
2、企业行业应用
n 实时准确地监控、追踪竞争对手动态,是企业获取竞争情报的利器。
n 及时获取竞争对手的公开信息以便研究同行业的发展与市场需求。
n 为企业决策部门和管理层提供便捷、多途径的企业战略决策工具。
n 大幅度地提高企业获取、利用情报的效率,节省情报信息收集、存储、挖掘的相关费用,是提高企业核心竞争力的关键。
n 提高企业整体分析研究能力、市场快速反应能力,建立起以知识管理为核心的竞争情报数据仓库,是提高企业核心竞争力的神经中枢。
3、新闻媒体行业应用
n 快速准确地自动跟踪、采集数千家网络媒体信息,扩大新闻线索,提高采集速度。
n 支持每天对数万条新闻进行有效抓取。监控范围的深度、广度可以自行设定。
n 支持对所需内容智能提取、审核。
n 实现互联网信息内容采集、浏览、编辑、管理、发布的一体化。
4、 行业网站应用
n 实时跟踪、采集与网站相关的信息来源。
n 及时跟踪行业的信息来源网站,自动,快速更新网站信息。动态更新信息。
n 实现互联网信息内容采集、浏览、编辑、管理、发布的一体化。
n 针对商务网站提出商务管理模式,大大提高行业网站的商务应用需求。
n 针对资讯网站分类目录生成,提出用户生成网站分类结构。并可以实时增加与更新分类结构。不受级数限制。从而大大利高行业的应用性。
n 提供搜索引擎SEO优化专业服务,快速提高行业网站的推广。
n 提供与CCDC呼叫搜索引擎的广告合作。建立行业网站联盟,提高行业网站知名度。
5) 网络信息监察与监控
n 网络舆情系统。如“千瓦通信-网络舆情雷达监测系统”
n 网站信息与内容监察与监控系统,如“千瓦通信-网站信息与内容监测与监察系统(站内神探)”
随着因特网的迅猛发展、WEB信息的增加,用户要在信息海洋里查找信息,就象大海捞
针一样,搜索引擎技术恰好解决了这一难题(它可以为用户提供信息检索服务)。目前,
搜索引擎技术正成为计算机工业界和学术界争相研究、开发的对象。
搜索引擎(Search Engine)是随着WEB信息的迅速增加,从1995年开始逐渐发展起来
的技术。据发表在《科学》杂志1999年7月的文章《WEB信息的可访问性》估计,全球目前
的网页超过8亿,有效数据超过9T,并且仍以每4个月翻一番的速度增长。用户要在如此浩
瀚的信息海洋里寻找信息,必然会"大海捞针"无功而返。搜索引擎正是为了解决这个"迷航
"问题而出现的技术。搜索引擎以一定的策略在互联网中搜集、发现信息,对信息进行理解
、提取、组织和处理,并为用户提供检索服务,从而起到信息导航的目的。搜索引擎提供
的导航服务已经成为互联网上非常重要的网络服务,搜索引擎站点也被美誉为"网络门户"
。搜索引擎技术因而成为计算机工业界和学术界争相研究、开发的对象。本文旨在对搜索
引擎的关键技术进行简单的介绍,以起到抛砖引玉的作用。

分 类

按照信息搜集方法和服务提供方式的不同,搜索引擎系统可以分为三大类:
1.目录式搜索引擎:以人工方式或半自动方式搜集信息,由编辑员查看信息之后,人
工形成信息摘要,并将信息置于事先确定的分类框架中。信息大多面向网站,提供目录浏
览服务和直接检索服务。该类搜索引擎因为加入了人的智能,所以信息准确、导航质量高
,缺点是需要人工介入、维护量大、信息量少、信息更新不及时。这类搜索引擎的代表是
:Yahoo、LookSmart、Open Directory、Go Guide等。
2.机器人搜索引擎:由一个称为蜘蛛(Spider)的机器人程序以某种策略自动地在互
联网中搜集和发现信息,由索引器为搜集到的信息建立索引,由检索器根据用户的查询输
入检索索引库,并将查询结果返回给用户。服务方式是面向网页的全文检索服务。该类搜
索引擎的优点是信息量大、更新及时、毋需人工干预,缺点是返回信息过多,有很多无关
信息,用户必须从结果中进行筛选。这类搜索引擎的代表是:AltaVista、Northern Ligh
t、Excite、Infoseek、Inktomi、FAST、Lycos、Google;国内代表为:"天网"、悠游、O
penFind等。
3.元搜索引擎:这类搜索引擎没有自己的数据,而是将用户的查询请求同时向多个搜
索引擎递交,将返回的结果进行重复排除、重新排序等处理后,作为自己的结果返回给用
户。服务方式为面向网页的全文检索。这类搜索引擎的优点是返回结果的信息量更大、更
全,缺点是不能够充分使用所使用搜索引擎的功能,用户需要做更多的筛选。这类搜索引
擎的代表是WebCrawler、InfoMarket等。

性 能 指 标
我们可以将WEB信息的搜索看作一个信息检索问题,即在由WEB网页组成的文档库中检索
出与用户查询相关的文档。所以我们可以用衡量传统信息检索系统的性能参数-召回率(R
ecall)和精度(Pricision)衡量一个搜索引擎的性能。
召回率是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系
统(搜索引擎)的查全率;精度是检索出的相关文档数与检索出的文档总数的比率,衡量
的是检索系统(搜索引擎)的查准率。对于一个检索系统来讲,召回率和精度不可能两全
其美:召回率高时,精度低,精度高时,召回率低。所以常常用11种召回率下11种精度的
平均值(即11点平均精度)来衡量一个检索系统的精度。对于搜索引擎系统来讲,因为没
有一个搜索引擎系统能够搜集到所有的WEB网页,所以召回率很难计算。目前的搜索引擎系
统都非常关心精度。
影响一个搜索引擎系统的性能有很多因素,最主要的是信息检索模型,包括文档和查询
的表示方法、评价文档和用户查询相关性的匹配策略、查询结果的排序方法和用户进行相
关度反馈的机制。

主 要 技 术
一个搜索引擎由搜索器、索引器、检索器和用户接口等四个部分组成。
1.搜索器
搜索器的功能是在互联网中漫游,发现和搜集信息。它常常是一个计算机程序,日夜
不停地运行。它要尽可能多、尽可能快地搜集各种类型的新信息,同时因为互联网上的信
息更新很快,所以还要定期更新已经搜集过的旧信息,以避免死连接和无效连接。目前有
两种搜集信息的策略:
● 从一个起始URL集合开始,顺着这些URL中的超链(Hyperlink),以宽度优先、深
度优先或启发式方式循环地在互联网中发现信息。这些起始URL可以是任意的URL,但常常
是一些非常流行、包含很多链接的站点(如Yahoo!)。
● 将Web空间按照域名、IP地址或国家域名划分,每个搜索器负责一个子空间的穷尽
搜索。 搜索器搜集的信息类型多种多样,包括HTML、XML、Newsgroup文章、FTP文件、
字处理文档、多媒体信息。 搜索器的实现常常用分布式、并行计算技术,以提高信息
发现和更新的速度。商业搜索引擎的信息发现可以达到每天几百万网页。
2.索引器
索引器的功能是理解搜索器所搜索的信息,从中抽取出索引项,用于表示文档以及生
成文档库的索引表。
索引项有客观索引项和内容索引项两种:客观项与文档的语意内容无关,如作者名、
URL、更新时间、编码、长度、链接流行度(Link Popularity)等等;内容索引项是用来
反映文档内容的,如关键词及其权重、短语、单字等等。内容索引项可以分为单索引项和
多索引项(或称短语索引项)两种。单索引项对于英文来讲是英语单词,比较容易提取,
因为单词之间有天然的分隔符(空格);对于中文等连续书写的语言,必须进行词语的切
分。 在搜索引擎中,一般要给单索引项赋与一个权值,以表示该索引项对文档的区分
度,同时用来计算查询结果的相关度。使用的方法一般有统计法、信息论法和概率法。短
语索引项的提取方法有统计法、概率法和语言学法。
索引表一般使用某种形式的倒排表(Inversion List),即由索引项查找相应的文档
。索引表也可能要记录索引项在文档中出现的位置,以便检索器计算索引项之间的相邻或
接近关系(proximity)。
索引器可以使用集中式索引算法或分布式索引算法。当数据量很大时,必须实现即时
索引(Instant Indexing),否则不能够跟上信息量急剧增加的速度。索引算法对索引器
的性能(如大规模峰值查询时的响应速度)有很大的影响。一个搜索引擎的有效性在很大
程度上取决于索引的质量。
3.检索器 检索器的功能是根据用户的查询在索引库中快速检出文档,进行文档与
查询的相关度评价,对将要输出的结果进行排序,并实现某种用户相关性反馈机制。
检索器常用的信息检索模型有集合理论模型、代数模型、概率模型和混合模型四种。
4.用户接口
用户接口的作用是输入用户查询、显示查询结果、提供用户相关性反馈机制。主要的
目的是方便用户使用搜索引擎,高效率、多方式地从搜索引擎中得到有效、及时的信息。
用户接口的设计和实现使用人机交互的理论和方法,以充分适应人类的思维习惯。
用户输入接口可以分为简单接口和复杂接口两种。
简单接口只提供用户输入查询串的文本框;复杂接口可以让用户对查询进行限制,如
逻辑运算(与、或、非;+、-)、相近关系(相邻、NEAR)、域名范围(如.e、.com)
、出现位置(如标题、内容)、信息时间、长度等等。目前一些公司和机构正在考虑制定
查询选项的标准。

未 来 动 向
搜索引擎已成为一个新的研究、开发领域。因为它要用到信息检索、人工智能、计算
机网络、分布式处理、数据库、数据挖掘、数字图书馆、自然语言处理等多领域的理论和
技术,所以具有综合性和挑战性。又由于搜索引擎有大量的用户,有很好的经济价值,所
以引起了世界各国计算机科学界和信息产业界的高度关注,目前的研究、开发十分活跃,
并出现了很多值得注意的动向。
1.十分注意提高信息查询结果的精度,提高检索的有效性 用户在搜索引擎上进行
信息查询时,并不十分关注返回结果的多少,而是看结果是否和自己的需求吻合。对于一
个查询,传统的搜索引擎动辄返回几十万、几百万篇文档,用户不得不在结果中筛选。解
决查询结果过多的现象目前出现了几种方法:一是通过各种方法获得用户没有在查询语句
中表达出来的真正用途,包括使用智能代理跟踪用户检索行为,分析用户模型;使用相关
度反馈机制,使用户告诉搜索引擎哪些文档和自己的需求相关(及其相关的程度),哪些
不相关,通过多次交互逐步求精。二是用正文分类(Text Categorization)技术将结果分
类,使用可视化技术显示分类结构,用户可以只浏览自己感兴趣的类别。三是进行站点类
聚或内容类聚,减少信息的总量。
2.基于智能代理的信息过滤和个性化服务
信息智能代理是另外一种利用互联网信息的机制。它使用自动获得的领域模型(如We
b知识、信息处理、与用户兴趣相关的信息资源、领域组织结构)、用户模型(如用户背景
、兴趣、行为、风格)知识进行信息搜集、索引、过滤(包括兴趣过滤和不良信息过滤)
,并自动地将用户感兴趣的、对用户有用的信息提交给用户。智能代理具有不断学习、适
应信息和用户兴趣动态变化的能力,从而提供个性化的服务。智能代理可以在用户端进行
,也可以在服务器端运行。
3.采用分布式体系结构提高系统规模和性能
搜索引擎的实现可以采用集中式体系结构和分布式体系结构,两种方法各有千秋。但
当系统规模到达一定程度(如网页数达到亿级)时,必然要采用某种分布式方法,以提高
系统性能。搜索引擎的各个组成部分,除了用户接口之外,都可以进行分布:搜索器可以
在多台机器上相互合作、相互分工进行信息发现,以提高信息发现和更新速度;索引器可
以将索引分布在不同的机器上,以减小索引对机器的要求;检索器可以在不同的机器上.

Ⅳ 如何写索引,让查询速度快

首先来看看表是否有索引的命令
show index from 表名;
看到主键索引,索引类型是BTREE(二叉树)
正是因为这个二叉树算法,让查询速度快很多,二叉树的原理,就是取最中间的一个数,然后把大于这个数的往右边排,小于这个数的就向左排,每次减半,然后依次类推,每次减半,形成一个树状结构图
例如上面的例子,我们不使用索引的话,需要查询11次才把编号为4的数据取出,如果加上索引,我们只需要4次就可以取出。

如大家所知道的,MySQL目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
那么,这几种索引有什么功能和性能上的不同呢?
FULLTEXT
即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE INDEX创建FULLTEXT索引,要比先为一张表建立FULLTEXT然后再将数据写入的速度快很多。
全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。在没有全文索引之前,这样一个查询语句是要进行遍历数据表操作的,可见,在数据量较大时是极其的耗时的,如果没有异步IO处理,进程将被挟持,很浪费时间,当然这里不对异步IO作进一步讲解,想了解的童鞋,自行谷哥。
全文索引的使用方法并不复杂:
创建ALTER TABLE table ADD INDEX `FULLINDEX` USING FULLTEXT(`cname1`[,cname2…]);
使用SELECT * FROM table WHERE MATCH(cname1[,cname2…]) AGAINST ('word' MODE );
其中, MODE为搜寻方式(IN BOOLEAN MODE ,IN NATURAL LANGUAGE MODE ,IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION / WITH QUERY EXPANSION)。
关于这三种搜寻方式,愚安在这里也不多做交代,简单地说,就是,布尔模式,允许word里含一些特殊字符用于标记一些具体的要求,如+表示一定要有,-表示一定没有,*表示通用匹配符,是不是想起了正则,类似吧;自然语言模式,就是简单的单词匹配;含表达式的自然语言模式,就是先用自然语言模式处理,对返回的结果,再进行表达式匹配。
对搜索引擎稍微有点了解的同学,肯定知道分词这个概念,FULLTEXT索引也是按照分词原理建立索引的。西文中,大部分为字母文字,分词可以很方便的按照空格进行分割。但很明显,中文不能按照这种方式进行分词。那又怎么办呢?这个向大家介绍一个Mysql的中文分词插件Mysqlcft,有了它,就可以对中文进行分词,想了解的同学请移步Mysqlcft,当然还有其他的分词插件可以使用。
HASH
Hash这个词,可以说,自打我们开始码的那一天起,就开始不停地见到和使用到了。其实,hash就是一种(key=>value)形式的键值对,如数学中的函数映射,允许多个key对应相同的value,但不允许一个key对应多个value。正是由于这个特性,hash很适合做索引,为某一列或几列建立hash索引,就会利用这一列或几列的值通过一定的算法计算出一个hash值,对应一行或几行数据(这里在概念上和函数映射有区别,不要混淆)。在Java语言中,每个类都有自己的hashcode()方法,没有显示定义的都继承自object类,该方法使得每一个对象都是唯一的,在进行对象间equal比较,和序列化传输中起到了很重要的作用。hash的生成方法有很多种,足可以保证hash码的唯一性,例如在MongoDB中,每一个document都有系统为其生成的唯一的objectID(包含时间戳,主机散列值,进程PID,和自增ID)也是一种hash的表现。额,我好像扯远了-_-!
由于hash索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。那为什么还需要其他的树形索引呢?
在这里愚安就不自己总结了。引用下园子里其他大神的文章:来自 14的路 的MySQL的btree索引和hash索引的区别
(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。
由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。
(2)Hash 索引无法被用来避免数据的排序操作。
由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;
(3)Hash 索引不能利用部分索引键查询。
对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。
(4)Hash 索引在任何时候都不能避免表扫描。
前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。
(5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。
对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

愚安我稍作补充,讲一下HASH索引的过程,顺便解释下上面的第4,5条:
当我们为某一列或某几列建立hash索引时(目前就只有MEMORY引擎显式地支持这种索引),会在硬盘上生成类似如下的文件:
hash值 存储地址
1db54bc745a1 77#45b5
4bca452157d4 76#4556,77#45cc…

hash值即为通过特定算法由指定列数据计算出来,磁盘地址即为所在数据行存储在硬盘上的地址(也有可能是其他存储地址,其实MEMORY会将hash表导入内存)。
这样,当我们进行WHERE age = 18 时,会将18通过相同的算法计算出一个hash值==>在hash表中找到对应的储存地址==>根据存储地址取得数据。
所以,每次查询时都要遍历hash表,直到找到对应的hash值,如(4),数据量大了之后,hash表也会变得庞大起来,性能下降,遍历耗时增加,如(5)。
BTREE
BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中,相信学过数据结构的童鞋都对当初学习二叉树这种数据结构的经历记忆犹新,反正愚安我当时为了软考可是被这玩意儿好好地折腾了一番,不过那次考试好像没怎么考这个。如二叉树一样,每次查询都是从树的入口root开始,依次遍历node,获取leaf。
BTREE在MyISAM里的形式和Innodb稍有不同
在 Innodb里,有两种形态:一是primary key形态,其leaf node里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据。二是secondary index,其leaf node和普通的BTREE差不多,只是还存放了指向主键的信息.
而在MyISAM里,主键和其他的并没有太大区别。不过和Innodb不太一样的地方是在MyISAM里,leaf node里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.
RTREE
RTREE在mysql很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。
相对于BTREE,RTREE的优势在于范围查找.
各种索引的使用情况
(1)对于BTREE这种Mysql默认的索引类型,具有普遍的适用性
(2)由于FULLTEXT对中文支持不是很好,在没有插件的情况下,最好不要使用。其实,一些小的博客应用,只需要在数据采集时,为其建立关键字列表,通过关键字索引,也是一个不错的方法,至少愚安我是经常这么做的。
(3)对于一些搜索引擎级别的应用来说,FULLTEXT同样不是一个好的处理方法,Mysql的全文索引建立的文件还是比较大的,而且效率不是很高,即便是使用了中文分词插件,对中文分词支持也只是一般。真要碰到这种问题,Apache的Lucene或许是你的选择。
(4)正是因为hash表在处理较小数据量时具有无可比拟的素的优势,所以hash索引很适合做缓存(内存数据库)。如mysql数据库的内存版本Memsql,使用量很广泛的缓存工具Mencached,NoSql数据库redis等,都使用了hash索引这种形式。当然,不想学习这些东西的话Mysql的MEMORY引擎也是可以满足这种需求的。

Ⅳ 索引顺序查找算法

索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。索引查找的过程是:首先根据给定的索引值K1,在索引表上查找出索引值等于KI的索引项,以确定对应予表在主表中的开始位置和长度,然后再根据给定的关键字K2,茬对应的子表中查找出关键字等于K2的元素(结点)。对索引表或子表进行查找时,若表是顺序存储的有序表,则既可进行顺序查找,也可进行二分查找,否则只能进行顺序查找。
设数组A是具有mainlist类型的一个主表,数组B是具有inde)dist类型的在主表A 上建立的一个索引表,m为索引表B的实际长度,即所含的索引项的个数,KI和K2分别为给定待查找的索引值和关键字(当然它们的类型应分别为索引表中索引值域的类型和主表中关键字域在索引存储中,不仅便于查找单个元素,而且更便于查找一个子表中的全部元素。当需要对一个子袁中的全部元素依次处理时,只要从索引表中查找出该子表的开始位置即可。由此开始位置可以依次取出该子表中的每一个元素,所以整个查找过程的时间复杂度为,若不是采用索引存储,而是采用顺序存储,即使把它组织成有序表而进行二分查找时,索引查找一个子表中的所有元素与二分查找一个子表中的所有元素相比。
若在主表中的每个子表后都预留有空闲位置,则索引存储也便于进行插入和删除运算,因为其运算过程只涉及到索引表和相应的子表,只需要对相应子表中的元素进行比较和移动,与其它任何子表无关,不像顺序表那样需涉及到整个表中的所有元素,即牵一发而动全身。
在线性表的索引存储结构上进行插入和删除运算的算法,也同查找算法类似,其过程为:首先根据待插入或删除元素的某个域(假定子表就是按照此域的值划分的)的值查找索引表,确定出对应的子表,然后再根据待插入或删除元素的关键字,在该子表中做插入或删除元素的操作。因为每个子表不是顺序存储,就是链接存储,所以对它们做插入或删除操作都是很简单的。

不知道答案与兄台的问题是否一致,也是网上找的,不对请见谅哈~~

Ⅵ 图书馆图书索引过程中用到的的算法

图书索书号一般包括两个部分(多数情况下占2行),一是分类号,二是区分号。分类号表示这本书属于哪一学科类别,区分号表示本图书馆该类图书的不同品种区分。比如一图书馆买了很多种“C语言编程”的图书,有张三编的,有李四编的。

Ⅶ 索引的原理

索引是一种利用某种规则的数据结构与实际数据的关系加快数据查找的功能;索引数据节点中有着实际文件的位置,因为索引是根据特定的规则和算法构建的,在查找的时候遵循索引的规则可以快速查找到对应数据的节点,从而达到快速查找数据的效果。

Ⅷ 算法与数据结构 索引查找的实现

二分查找法、哈希查找法、二叉排序树查找法等各种查找算法。1. 线性表上的查找: 主要分为三种线性结构:顺序表,有序顺序表,索引顺序表。对于第一种,我们采用传统查找方法,逐个比较。对于及有序顺序表我们采用二分查找法。对于第三种索引结构,我们采用索引查找算法。其中,二分查找还要特别注意适用条件以及其递归实现方法。 2.树表上的查找: 树表主要分为以下几种:二叉排序树,平衡二叉树,B树,键树。由于二叉排序树与平衡二叉树是一种特殊的二叉树,所以与二叉树的联系就更为紧密。 二叉排序树,它的中序遍历结果是一个递增的有序序列。平衡二叉树是二叉排序树的优化,其本质也是一种二叉排序树,只不过,平衡二叉树对左右子树的深度有了限定。 B树是二叉排序树的进一步改进,也可以把B树理解为三叉、四叉....排序树。因为这两种算法涉及到B树结点的分裂和合并,是一个难点。键树也称字符树,特别适用于查找英文单词的场合。一般不要求能完整描述算法源码,多是根据算法思想建立键树及描述其大致查找过程。 3.基本哈希表的查找算法: 哈希表查找的基本思想是:根据当前待查找数据的特征,以记录关键字为自变量,设计一个function,该函数对关键字进行转换后,其解释结果为待查的地址。堆排序属于选择排序类型的排序,是一树形选择排序。堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成,它们均是通过调用Heapify实现的。 堆排序的最坏时间复杂度为O(nlgn)。堆排序的平均性能较接近于最坏性能。 由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。 堆排序是就地排序,辅助空间为O(1), 它是不稳定的排序方法。堆排序,是利用堆这种数据结构的性质,通过堆元素的删除、调整等一系列操作将最小数选出放在堆顶。堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。
vae.la

Ⅸ 由于索引表是(____)的,可以采取类似(____)查找的快速定位算法,在实际应用中,

摘要 由于索引表是排序的, 可以采取类似二分查找的快速定 位算法,在实际应用中,索引表还可以驻留在主存储器中,进一步提高查找的访问速度。

Ⅹ 搜索引擎算法中,什么是正向索引什么是倒排索引

倒排索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件。建立全文索引中有两项非常重要,一个是如何对文本进行分词,一是建立索引的数据结构。分词的方法基本上是二元分词法、最大匹配法和统计方法。索引的数据结构基本上采用倒排索引的结构。
分词的好坏关系到查询的准确程度和生成的索引的大小。在中文分词发展中,早期经常使用分词方式是二元分词法,该方法的基本原理是将包含中文的句子进行二元分割,不考虑单词含义,只对二元单词进行索引。因此该方法所分出的单词数量较多,从而产生的索引数量巨大,查询中会将无用的数据检索出来,好处是算法简单不会漏掉检索的数据。之后又发展出最大匹配分词方法,该方法又分为正向最大分词和逆向最大分词。其原理和查字典类似,对常用单词生成一个词典,分析句子的过程中最大的匹配字典中的单词,从而将句子拆分为有意义的单词链。最大匹配法中正向分词方法对偏正式词语的分辨容易产生错误,比如“首饰和服装”会将“和服”作为单词分出。达梦数据库采用的是改进的逆向最大分词方法,该分词方法较正向正确率有所提高。最为复杂的是通过统计方式进行分词的方法。该方法采用隐式马尔科夫链,也就是后一个单词出现的概率依靠于前一个单词出现的概率,最后统计所有单词出现的概率的最大为分词的依据。这个方法对新名词和地名的识别要远远高于最大匹配法,准确度随着取样文本的数量的增大而提高。
二元分词方法和统计方法是不依赖于词典的,而最大匹配法分词方法是依赖于词典的,词典的内容决定分词结构的好坏。
全文检索的索引被称为倒排索引,之所以成为倒排索引,是因为将每一个单词作为索引项,根据该索引项查找包含该单词的文本。因此,索引都是单词和唯一记录文本的标示是一对多的关系。将索引单词排序,根据排序后的单词定位包含该单词的文本。
步骤1)读取一整条句子到变量str中,转到步骤2

步骤2)从句子的尾端读取1个字到变量word中,转到步骤3

步骤3)在字典查找word中保存的单词。如果存在则保存word,转到步骤4,否则转到步骤5)

步骤4)如果是字典中最大单词或者超过最大单词数(认定为新词),从句尾去掉该单词,返回步骤2

步骤5)读取前一个字到word中,构成新单词,转到步骤3)

词库的内存数据结构和词库中单词的匹配算法

内存中单词采用层次结构保存

假设字典中有如下的单词:中国 中华民国 国家 人民 民主

在内存中按照如下方式按层排列,其中每一个方块代表一个字,箭头所指向为该单词的前一个字

阅读全文

与索引算法相关的资料

热点内容
苹果版app是什么 浏览:743
云服务器能更换地址 浏览:74
linux预读算法 浏览:556
视频用什么app编辑 浏览:68
编译原理清华实验 浏览:976
闲蛋app人气怎么样 浏览:273
javacatch用法 浏览:859
京峰教育python 浏览:984
加密货币战胜法定货币 浏览:684
混凝土结构中册pdf 浏览:931
永劫无间解压不了怎么回事 浏览:810
php如何开启curl 浏览:676
红黄文件夹 浏览:126
违背皇帝的命令是死罪吗 浏览:69
phpcurl处理错误 浏览:463
linuxftp防火墙端口设置 浏览:790
java面板图片 浏览:485
泰拉瑞亚14安卓版怎么操作 浏览:720
安卓手机相册加密软件 浏览:53
免费云服务器能永久使用吗 浏览:705