游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

postgresql建立索引

  一、索引的类型:
  PostgreSQL提供了多种索引类型:BTree、Hash、GiST和GIN,由于它们使用了不同的算法,因此每种索引类型都有其适合的查询类型,缺省时,CREATEINDEX命令将创建BTree索引。
  1。BTree:
  CREATETABLEtest1(
  idinteger,
  contentvarchar
  );
  CREATEINDEXtest1idindexONtest1(id);
  BTree索引主要用于等于和范围查询,特别是当索引列包含操作符、、、和作为查询条件时,PostgreSQL的查询规划器都会考虑使用BTree索引。在使用BETWEEN、IN、ISNULL和ISNOTNULL的查询中,PostgreSQL也可以使用BTree索引。然而对于基于模式匹配操作符的查询,如LIKE、ILIKE、和,仅当模式存在一个常量,且该常量位于模式字符串的开头时,如colLIKEfoo或colfoo,索引才会生效,否则将会执行全表扫描,如:colLIKEbar。
  2。Hash:
  CREATEINDEXnameONtableUSINGhash(column);
  散列(Hash)索引只能处理简单的等于比较。当索引列使用等于操作符进行比较时,查询规划器会考虑使用散列索引。
  这里需要额外说明的是,PostgreSQL散列索引的性能不比BTree索引强,但是散列索引的尺寸和构造时间则更差。另外,由于散列索引操作目前没有记录WAL日志,因此一旦发生了数据库崩溃,我们将不得不用REINDEX重建散列索引。
  3。GiST:
  GiST索引不是一种单独的索引类型,而是一种架构,可以在该架构上实现很多不同的索引策略。从而可以使GiST索引根据不同的索引策略,而使用特定的操作符类型。
  4。GIN:
  GIN索引是反转索引,它可以处理包含多个键的值(比如数组)。与GiST类似,GIN同样支持用户定义的索引策略,从而可以使GIN索引根据不同的索引策略,而使用特定的操作符类型。作为示例,PostgreSQL的标准发布中包含了用于一维数组的GIN操作符类型,如:、、、等。
  二、复合索引:
  PostgreSQL中的索引可以定义在数据表的多个字段上,如:
  CREATETABLEtest2(
  majorint,
  minorint,
  namevarchar
  }
  CREATEINDEXtest2mmidxONtest2(major,minor);
  在当前的版本中,只有Btree、GiST和GIN支持复合索引,其中最多可以声明32个字段。
  1。BTree类型的复合索引:
  在BTree类型的复合索引中,该索引字段的任意子集均可用于查询条件,不过,只有当复合索引中的第一个索引字段(最左边)被包含其中时,才可以获得最高效率。
  2。GiST类型的复合索引:
  在GiST类型的复合索引中,只有当第一个索引字段被包含在查询条件中时,才能决定该查询会扫描多少索引数据,而其他索引字段上的条件只是会限制索引返回的条目。假如第一个索引字段上的大多数数据都有相同的键值,那么此时应用GiST索引就会比较低效。
  3。GIN类型的复合索引:
  与BTree和GiST索引不同的是,GIN复合索引不会受到查询条件中使用了哪些索引字段子集的影响,无论是哪种组合,都会得到相同的效率。
  使用复合索引应该谨慎。在大多数情况下,单一字段上的索引就已经足够了,并且还节约时间和空间。除非表的使用模式非常固定,否则超过三个字段的索引几乎没什么用处。
  三、组合多个索引:
  PostgreSQL可以在查询时组合多个索引(包括同一索引的多次使用),来处理单个索引扫描不能实现的场合。与此同时,系统还可以在多个索引扫描之间组成AND和OR的条件。比如,一个类似WHEREx42ORx47ORx53ORx99的查询,可以被分解成四个独立的基于x字段索引的扫描,每个扫描使用一个查询子句,之后再将这些扫描结果OR在一起并生成最终的结果。另外一个例子是,如果我们在x和y上分别存在独立的索引,那么一个类似WHEREx5ANDy6的查询,就会分别基于这两个字段的索引进行扫描,之后再将各自扫描的结果进行AND操作并生成最终的结果行。
  为了组合多个索引,系统扫描每个需要的索引,然后在内存里组织一个BITMAP,它将给出索引扫描出的数据在数据表中的物理位置。然后,再根据查询的需要,把这些位图进行AND或者OR的操作并得出最终的BITMAP。最后,检索数据表并返回数据行。表的数据行是按照物理顺序进行访问的,因为这是位图的布局,这就意味着任何原来的索引的排序都将消失。如果查询中有ORDERBY子句,那么还将会有一个额外的排序步骤。因为这个原因,以及每个额外的索引扫描都会增加额外的时间,这样规划器有时候就会选择使用简单的索引扫描,即使有多个索引可用也会如此。
  四、唯一索引:
  目前,只有BTree索引可以被声明为唯一索引。
  CREATEUNIQUEINDEXnameONtable(column〔,。。。〕);
  如果索引声明为唯一索引,那么就不允许出现多个索引值相同的行。我们认为NULL值相互间不相等。
  五、表达式索引:
  表达式索引主要用于在查询条件中存在基于某个字段的函数或表达式的结果与其他值进行比较的情况,如:
  SELECTFROMtest1WHERElower(col1)value;
  此时,如果我们仅仅是在col1字段上建立索引,那么该查询在执行时一定不会使用该索引,而是直接进行全表扫描。如果该表的数据量较大,那么执行该查询也将会需要很长时间。解决该问题的办法非常简单,在test1表上建立基于col1字段的表达式索引,如:
  CREATEINDEXtest1lowercol1idxONtest1(lower(col1));
  如果我们把该索引声明为UNIQUE,那么它会禁止创建那种col1数值只是大小写有区别的数据行,以及col1数值完全相同的数据行。因此,在表达式上的索引可以用于强制那些无法定义为简单唯一约束的约束。现在让我们再看一个应用表达式索引的例子。
  SELECTFROMpeopleWHERE(firstnamelastname)JohnSmith;
  和上面的例子一样,尽管我们可能会为firstname和lastname分别创建独立索引,或者是基于这两个字段的复合索引,在执行该查询语句时,这些索引均不会被使用,该查询能够使用的索引只有我们下面创建的表达式索引。
  CREATEINDEXpeoplenamesONpeople((firstnamelastname));
  CREATEINDEX命令的语法通常要求在索引表达式周围书写圆括弧,就像我们在第二个例子里显示的那样。如果表达式只是一个函数调用,那么可以省略,就像我们在第一个例子里显示的那样。
  从索引维护的角度来看,索引表达式要相对低效一些,因为在插入数据或者更新数据的时候,都必须为该行计算表达式的结果,并将该结果直接存储到索引里。然而在查询时,PostgreSQL就会把它们看做WHEREidxcolconstant,因此搜索的速度等效于基于简单索引的查询。通常而言,我们只是应该在检索速度比插入和更新速度更重要的场景下使用表达式索引。
  六、部分索引:
  部分索引(partialindex)是建立在一个表的子集上的索引,而该子集是由一个条件表达式定义的(叫做部分索引的谓词)。该索引只包含表中那些满足这个谓词的行。
  由于不是在所有的情况下都需要更新索引,因此部分索引会提高数据插入和数据更新的效率。然而又因为部分索引比普通索引要小,因此可以更好的提高确实需要索引部分的查询效率。见以下三个示例:
  1。索引字段和谓词条件字段一致:
  CREATEINDEXaccesslogclientipixONaccesslog(clientip)
  WHERENOT(clientipinet192。168。100。0ANDclientipinet192。168。100。255);
  下面的查询将会用到该部分索引:
  SELECTFROMaccesslogWHEREurlindex。htmlANDclientipinet212。78。10。32;
  下面的查询将不会用该部分索引:
  一个不能使用这个索引的查询可以是
  SELECTFROMaccesslogWHEREclientipinet192。168。100。23;
  2。索引字段和谓词条件字段不一致:
  PostgreSQL支持带任意谓词的部分索引,唯一的约束是谓词的字段也要来自于同样的数据表。注意,如果你希望你的查询语句能够用到部分索引,那么就要求该查询语句的条件部分必须和部分索引的谓词完全匹配。准确说,只有在PostgreSQL能够识别出该查询的WHERE条件在数学上涵盖了该索引的谓词时,这个部分索引才能被用于该查询。
  CREATEINDEXordersunbilledindexONorders(ordernr)WHEREbilledisnottrue;
  下面的查询一定会用到该部分索引:
  SELECTFROMordersWHEREbilledisnottrueANDordernr10000;
  那么对于如下查询呢?
  SELECTFROMordersWHEREbilledisnottrueANDamount5000。00;
  这个查询将不像上面那个查询这么高效,毕竟查询的条件语句中没有用到索引字段,然而查询条件billedisnottrue却和部分索引的谓词完全匹配,因此PostgreSQL将扫描整个索引。这样只有在索引数据相对较少的情况下,该查询才能更有效一些。
  下面的查询将不会用到部分索引。
  SELECTFROMordersWHEREordernr3501;
  3。数据表子集的唯一性约束:
  CREATETABLEtests(
  subjecttext,
  targettext,
  successboolean,
  。。。
  );
  CREATEUNIQUEINDEXtestssuccessconstraintONtests(subject,target)WHEREsuccess;
  该部分索引将只会对success字段值为true的数据进行唯一性约束。在实际的应用中,如果成功的数据较少,而不成功的数据较多时,该实现方法将会非常高效。
  七、检查索引的使用:
  见以下四条建议:
  1。总是先运行ANALYZE。
  该命令将会收集表中数值分布状况的统计。在估算一个查询返回的行数时需要这个信息,而规划器则需要这个行数以便给每个可能的查询规划赋予真实的开销值。如果缺乏任何真实的统计信息,那么就会使用一些缺省数值,这样肯定是不准确的。因此,如果还没有运行ANALYZE就检查一个索引的使用状况,那将会是一次失败的检查。
  2。使用真实的数据做实验。
  用测试数据填充数据表,那么该表的索引将只会基于测试数据来评估该如何使用索引,而不是对所有的数据都如此使用。比如从100000行中选1000行,规划器可能会考虑使用索引,那么如果从100行中选1行就很难说也会使用索引了。因为100行的数据很可能是存储在一个磁盘页面中,然而没有任何查询规划能比通过顺序访问一个磁盘页面更加高效了。与此同时,在模拟测试数据时也要注意,如果这些数据是非常相似的数据、完全随机的数据,或按照排序顺序插入的数据,都会令统计信息偏离实际数据应该具有的特征。
  3。如果索引没有得到使用,那么在测试中强制它的使用也许会有些价值。有一些运行时参数可以关闭各种各样的查询规划。
  4。强制使用索引用法将会导致两种可能:一是系统选择是正确的,使用索引实际上并不合适,二是查询计划的开销计算并不能反映现实情况。这样你就应该对使用和不使用索引的查询进行计时,这个时候EXPLAINANALYZE命令就很有用了。

卡罗尔和她的小猫公开课教学反思这篇课文虽然是一篇略读课文,文笔却生动有趣,孩子们很感兴趣。当天正好投影仪坏了,可并不影响孩子们学习的兴趣,孩子们发言非常积极,连平时走神的孩子都听得津津有味。以下几点我印象深……歹的组词造句1、好歹造句:因为此类状况出现时,人的观点立场只取决于人,而非话题本身,我们不能因为某个问题总是倾向于引起信仰之争就得出结论说,这个问题没有正确,好歹之分。解释:(1)好……放焰火教案范文活动目标:1。学习用肢体动作来表现放焰火的联想。2。会与同伴共同完成相关动作,有协作精神,提高舞蹈表现力和创造力。活动准备:1、焰火形状的节奏图谱……关于亲子活动教案关于亲子活动教案是家长与孩子一起随音乐参与活动,提高孩子参与活动兴趣。关于亲子活动教案怎么设计,以下就是小编整理的亲子活动教案,一起来看看吧!一、准备活动:《模仿动作》……人教版七年级历史下册第20课明清经济的发展和闭关锁国教学反1、复习导入时间过长;2、内容过多,以前分两节课,现在合为一节;3、新课标对本课要求只需掌握清朝闭关锁国表现,对明清经济发展没作要求,我这部分是否讲解过多?用什么方……怀念母亲备课教案一、说教材《怀念母亲》是六年级上册第六课。课文介绍了作者对两位母亲一位是亲生母亲,一位是祖国母亲同样崇高的敬意和同样真挚的爱慕。充分表达了作者对亲生母亲永久的悔恨,对祖国……高考英语虚拟语气考点透视与练习虚拟语气是历年高考的选考考点。考点常集中在含蓄条件句以及宾语从句中的虚拟语气上。所设选项常通过谓语动词的特殊形式来表示,而且都是结合具体语境来考查对考点的运用能力。今后高考对虚……窍读记的教学反思许多课文都有着作者独特的视角,需要我们去敏锐地洞察。文中所蕴含着的写作特色更是可以让人收获连连。尤其是一些微妙的心理带来的不仅仅是感动,更是一种水到渠成的文字的。魅力。课……二年级美术教学反思传统美术教学只重视专业知识与技能的传授,把学习仅仅局限在书本上,脱离学生的日常生活实际,在这种学习观念下,不仅很难培养出学生的创造精神,而且会泯灭学生学习的兴趣,最终影响学生的……人教版小学语文我们的民族小学说课稿今天我说课的内容是小学语文三年级上册《我们的民族小学》,下面我将从设计理念、教材解读、教学方法、教学预设几个方面来进行我的说课。一、设计理念:在新课标指导下,我本着……数学对操作的思考和做法教学反思操作既是学生探索和发现知识的重要方法,也是教师常用的教学方法。让学生学会操作,在操作过程中学会与他人合作交流,从而获得情感体验是新课标的重要内容。操作只是一种手段,不是目……成功努力氛围高二主题班会一、活动过程活动环节活动内容同伴点评环节一:播放歌曲一首《童年》,勾起对童年的回忆,相信每个人都有自己的梦想。(点明主题)主持人大方、……
海底世界的优秀教案设计范文教学目标:1、正确、流利、有感情地朗读课文。2、学会本课10个生字,两条绿线内的10个字只识不写。理解由生字组成的词语,会用窃窃私语景色奇异造句。3、通过朗读……老师,我想和你聊聊暑假的一天,我正在家里读书,突然,电话铃响了,我一接,竟然是我刚六年级毕业走的学生赵炀,他问我在哪儿,他说他想和我聊聊。我觉得窗外的阳光一直透射到我的心房里了,温暖无比。不过,……大班绳子体育优秀教案大班绳子体育课程的开展有利于提升幼儿们的身体素质,促进幼儿们健康成长。下面是小编推荐给大家的大班绳子体育优秀教案,希望大家有所收获。活动目标:1、有用绳子进行体育活……关于课文山雨的教学教案设计【学习目标】、认识本课个生字。、有感情地朗读课文,在读中想象课文所描绘的景色,在读中体会作者对山雨、对大自然的情感。、培养对文学作品初步的欣赏能力。【教……铁甲的造句1、滑铁卢战争中,他在杜布瓦旅当铁甲骑兵队队长。2、个人而言,我觉得这个无名机器人看着更像《铁甲威龙》里面那只。3、那是铁骑军的一个军官,并且是一个等级颇高的军官,……怒发冲冠成语造句【汉字书写】:怒发冲冠【汉语注音】:nfchnggun【成语出处】:西汉司马迁《史记廉颇蔺相如列传》:相如因持璧却立,倚柱,怒发上冲冠。【成语语法】:主谓式;……二年级音乐音乐小屋教学设计与反思及点评教材分析本课是《有效教学的探索与实践》三级子课题《优化艺术课堂教学,促进学生实践能力与创新意识的探索与研究》下的一篇教学案例,选用的教材是人民音乐出版社出版的小学音乐教材……畏惧斑斓的阅读答案我说得清自己是在哪天走向成熟的。因为打从那天起我开始畏惧美丽。我会站在一朵美艳绝伦的鲜花面前呆呆地看上一个时辰,心中涌动一股比爱深较妒淡的说不清道不明的热辣辣的感觉。台湾……人教版八年级语文落日的幻觉说课稿、《落日的幻觉》说课稿一、说教材1、课文内容:本课是一篇融文学性、知识性、科学性、哲理性于一体的科普文。文章的开始部分通过日出与日落的对比手法,描绘了日落的壮丽与神……二年数下千以内数的认识与表达教学反思数与代数的核心内容是数的概念和运算,学生已经学习了20以内数的认识和100以内数的认识,本学期将认数的范围扩展到万以内,而《千以内的认识》是从百跨入万的一个重要的衔接点也是基础……有关反义词教案在教学工作者实际的教学活动中,往往需要进行教案编写工作,借助教案可以提高教学质量,收到预期的教学效果。教案应该怎么写呢?以下是小编精心整理的有关反义词教案,仅供参考,大家一起来……苏教版方程教案教学内容:教科书第1213页,回顾与整理、练习与应用第14题。教学目标:1、通过回顾与整理,使学生进一步加深等式与方程的意义,等式的性质的理解。帮助学生理清知……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网